Добрый день!
С флешем знакома в общей сложности третьи сутки, учусь по туториалам которые попадаются на ютубе. Задача следующая: при движении персонажа вправо-влево-вверх-вниз включать соответствующую анимацию движения.
Код управления кнопками писался по туториалу управления тупокружочком, остальное - лучшее до чего я смогла дойти самостоятельно, прошерстив других схожих инструкций в количестве.
Проблема: при нажатии клавиш управления анимация включается, но проигрывается только один раз. Плюс есть не очень приятный баг: при одновременном нажатии двух клавиш, например вверх, потом не отпуская влево, персонаж поворачивается влево и продолжает в таком положении двигаться вверх.
Я буду очень благодарна, если случится чудо и какой-нибудь мимо проходящий альтруист поможет мне рецептом или хотя бы даст направление, и я очень прошу воздержаться от советов начать с чего-нибудь попроще.

Код AS3:
package AS {
import flash.display.MovieClip;
import flash.events.KeyboardEvent;
import flash.events.Event;
public class Hero extends MovieClip {
private var moveUp:Boolean;
private var moveDown:Boolean;
private var moveLeft:Boolean;
private var moveRight:Boolean;
private var moveUpFlag:Boolean;
private var moveDownFlag:Boolean;
private var moveLeftFlag:Boolean;
private var moveRightFlag:Boolean;
private var moveSpeed:uint;
public function Hero() {
moveUp=false;
moveRight=false;
moveLeft=false;
moveDown=false;
moveSpeed=4;
Constants.stageRef.addEventListener(KeyboardEvent.KEY_DOWN, keyPressedListener);
Constants.stageRef.addEventListener(KeyboardEvent.KEY_UP, keyReleasedListener);
Constants.stageRef.addEventListener(Event.ENTER_FRAME, frameListener);
}
private function keyPressedListener(e:KeyboardEvent){
var key:uint=e.keyCode;
if(key==87||key==38){//W or UP key
this.gotoAndPlay("goUp")
moveUp=true;
}else if(key==65||key==37){//A or LEFT key
this.gotoAndPlay("goLeft")
moveLeft=true;
}else if(key==83||key==40){//S or DOWN key
this.gotoAndPlay("goDown")
moveDown=true;
}else if(key==68||key==39){//D or RIGHT
this.gotoAndPlay("goRight")
moveRight=true;
}
}
private function keyReleasedListener(e:KeyboardEvent){
var key:uint=e.keyCode;
if(key==87||key==38){//W or UP key
this.gotoAndStop("goUp")
moveUp=false;
}else if(key==65||key==37){//A or LEFT key
this.gotoAndStop("goLeft")
moveLeft=false;
}else if(key==83||key==40){//S or DOWN key
this.gotoAndStop("goDown")
moveDown=false;
}else if(key==68||key==39){//D or RIGHT
this.gotoAndStop("goRight")
moveRight=false;
}
}
private function frameListener(e:Event){
if(moveUp){
this.y-=moveSpeed;
}else if(moveLeft){
this.x-=moveSpeed;
}else if(moveDown){
this.y+=moveSpeed;
}else if(moveRight){
this.x+=moveSpeed;
}
}
}
}