Недавно начал изучать actionscript 3. Сейчас пытаюсь разобраться с анимацией передвижения и возникла следующая проблема. Есть персонаж, анимации находятся в его символе(movieclip), c 1-24 кадра находится перемещение, с 25 по 44 - прыжок. Нужно сделать так, чтобы когда единоразово нажималась кнопка прыжка воспроизводилась соответствующая анимация. Все что смог придумать: либо привязывать анимацию к переменной нажатия кнопки прыжка, но тогда если отпустить эту кнопку воспроизведение анимации прекратиться, либо привязывать анимацию к моменту нахождения персонажа в воздухе, но и так воспроизведение не работает правильно(персонаж просто зависает в воздухе на первом кадре анимации, а когда приземляется воспроизводиться вся анимация персонажа начиная с текущего кадра до тех пока как-то не сдвинуть персонажа, на гифке запечатлен этот процесс). Думаю возможно каким-то образом проконтролировать воспроизведение анимации до конца и только затем воспроизводить следующую, но я не знаю как это сделать. Может кто-то уже сталкивался с подобными проблемами? не могли бы вы мне помочь?
Код ниже

Код AS3:
import flash.events.KeyboardEvent
import flash.events.Event;
stage.frameRate=30;
var mleft:Boolean;
var mright:Boolean;
var mjump:Boolean;
var speed:Number=0;
var accel:Number=0.7;
var fric:Number=0.6;
var gravity:Number=0;
character.stop();
stage.addEventListener(Event.ENTER_FRAME,main);
stage.addEventListener(KeyboardEvent.KEY_DOWN,walk);
stage.addEventListener(KeyboardEvent.KEY_UP,no_walk);
function main(e:Event){
if (mright)
{
character.scaleX= scaleX;
speed+=accel;
character.play();
if(character.currentFrame==24)
character.gotoAndPlay(1);
character.x+=speed;
}
if(mleft)
{
character.scaleX= -scaleX;
speed-=accel;
character.play();
if(character.currentFrame==24)
character.gotoAndPlay(1);
character.x+=speed;
}
if ((mright==false) && (mleft==false))
{
speed*=fric;
character.x+=speed;
}
if (speed>10) speed=10;
if (speed<-10) speed=-10;
if(mjump&&character.hitTestObject(ground))
{
gravity=-15;
}
character.y+=gravity;
if (!character.hitTestObject(ground))
{
character.gotoAndPlay(25);
if (character.currentFrame<44)
character.gotoAndPlay(25);
gravity++;
gravity++;
}
else
gravity=0;
if (character.x-character.width/2<0)
character.x=character.width/2;
if (character.x+character.width/2>1280)
character.x=1280-character.width/2;
}
function walk(e:KeyboardEvent)
{
if (e.keyCode==39)
mright=true;
if (e.keyCode==37)
mleft=true;
if (e.keyCode==38)
mjump=true;
}
function no_walk(e:KeyboardEvent)
{
if (e.keyCode==39)
mright=false;
if (e.keyCode==37)
mleft=false;
if (e.keyCode==38)
mjump=false;
character.gotoAndStop(1);
}