Vale a ver si me explico bien. Yo hago videojuegos en AS3, aunque soy un poco novato, y lo que siempre uso es un Timer que compruebe cuando las teclas están pulsadas. Respecto a lo de que el movimiento sea muy brusco es porque deberías usar aceleración. Mira:
Código Javascript
:
Ver originalvar pup:Boolean, pdown:Boolean, pright:Boolean, pleft:Boolean; //corresponden al estado de cada tecla, si están pulsadas true, si no false
pup = pdown = pright = pleft = false;
var acc:Number = 0.5; //La aceleración, 0.5, por ejemplo
var vx:Number = 0, vy:Number;
var timer:Timer = new Timer(25, 0); //Cada 25 ms se ejecutará la función moving
timer.start();
timer.addEventListener(TimerEvent.TIMER, moving);
stage.addEventListener(KeyboardEvent.KEY_DOWN, teclaPulsada);
stage.addEventListener(KeyboardEvent.KEY_UP, teclaSoltada);
function moving(e:TimerEvent):void
{
if(pup)
{
vy -= acc;
}
else if(pdown)
{
vy += acc;
}
if(pright)
{
vx += acc;
}
else if(pleft)
{
vx -= acc;
}
nave.x += vx;
nave.y += vy;
}
function teclaPulsada(event:KeyboardEvent):void
{
switch(event.keyCode)
{
case Keyboard.UP:
pup = true;
break;
case Keyboard.DOWN:
pdown = true;
break;
case Keyboard.RIGHT:
pright = true;
break;
case Keyboard.LEFT:
peft = true;
break;
}
}
function teclasSoltada(event:KeyboardEvent):void
{
switch(event.keyCode)
{
case Keyboard.UP:
pup = false;
break;
case Keyboard.DOWN:
pdown = false;
break;
case Keyboard.RIGHT:
pright = false;
break;
case Keyboard.LEFT:
peft = false;
break;
}
}
Ese codigo debería funcionar, si te da algún error dímelo. Eso sí, creo que deberías aprender más programación, porque solo ese trozo de código me dice que no llevas mucho programando. Lo más apropiado en la función es usar un switch. No quieras aprender demasiado rápido ;) Espero que funcione.