sabes que en Event.ENTER_FRAME entra continuamente por cada avance del los frames...y como KeyObject siempre tiene valor...pues siempre te esta haciendo moviento aunque no hayas pulsado tecla. Puedes crear una variable que te indique que has echo la pulsacion de la tecla y asi evitar que vuelva a entrar.
Código ActionScript :
var Pulsacion: Boolean= false;
private function loop(e:Event) : void
{
if (Pulsacion)
{
//haces lo que tienes que hacer con la pulsacion
Pulsacion= false;
}
}
pero como estas utilizando el KeyObject pues no podras capturar la tecla directamente desde esa clase (no lo se con seguridad) o puedes enfocarlo de otra forma
por ejemplo
Código ActionScript :
package
{
import flash.display.MovieClip;
import flash.events.Event;
import flash.events.KeyboardEvent;
import flash.ui.Keyboard;
public class Ship extends MovieClip
{
//variable para el avance del clip en las distintas direcciones;
private var velocidad:uint = 4;
//variable para contar las pulsaciones que has echo en clip
private var pulsaciones= 0;
//variable para ver la orientacion de la tecla...izquierda y arriba es negativo...derecha y abajo es positivo
private var orientacion= 0;
//variable para guardar la anterior tecla pulsada
private var Tecla: uint= 0;
//variable para etiqueta de animacion
private var Etiqueta: String= "";
public function Ship ()
{
//este evento solo se activa cuando el clip esta en el stage
this.addEventListener(Event.ADDED_TO_STAGE, Escenario);
}
private function Escenario (e: Event): void
{
//ya no nos sirve el evento y lo removemos
this.removeEventListener(Event.ADDED_TO_STAGE, Escenario);
//Evento para ver que tecla se ha pulsado en el stage
this.stage.addEventListener(KeyboardEvent.KEY_DOWN, TeclaPulsada);
//Evento para entrar por cada frames
this.addEventListener(Event.ENTER_FRAME, Animacion);
}
private function TeclaPulsada (e: KeyboardEvent): void
{
orientacion= 0;
//si cambia la pulsacion de la tecla
if (Tecla!= e.keyCode) pulsaciones=0;
switch (e.keyCode)
{
case Keyboard.LEFT:
orientacion=-1;
pulsaciones+=1;
Etiqueta= "link_left";
break;
case Keyboard.RIGHT:
orientacion=+1;
pulsaciones+=1;
Etiqueta= "link_right";
break;
case Keyboard.UP:
orientacion=-1;
pulsaciones+=1;
Etiqueta= "link_up";
break;
case Keyboard.DOWN:
orientacion=+1;
pulsaciones+=1;
Etiqueta= "link_down";
break;
}
//guardamos la tecla pulsada para comprobar con la siguiente tecla pulsada
Tecla= e.keyCode;
}
private function Animacion (e: Event): void
{
//solo entramos si tenemos alguna tecla pulsada
if (pulsaciones>0)
{
pulsaciones-=1;
//como no hacias mas que gotoAndPlay(...); stop(); se puede haceresto
gotoAndStop(Etiqueta);
//movemos el clip dependiendo de la etiqueta que tenemos
if (Etiqueta=="link_left" || Etiqueta=="link_right") this.x+=velocidad*orientacion;
if (Etiqueta=="link_up" || Etiqueta=="link_down") this.y+=velocidad*orientacion;
//comprobamos que el clip no ha salido del stage y si es asi le ajustamos la posicion
if (this.x<0) this.x= 0;
if (this.y<0) this.y= 0;
if (this.x>this.stage.stageWidth- this.width) this.x= this.stage.stageWidth- this.width;
if (this.y>this.stage.stageHeight- this.height) this.y= this.stage.stageHeight- this.height;
}
}
}
}
espero que te sirva de ayuda y te haya aclarqado tus dudas
saludos