You could try something like the following code: stage.addEventListener(KeyboardEvent.KEY_DOWN, downKey); function downKey(event:KeyboardEvent) { if( event.keyCode == Keyboard.UP ) { isUp=true; character.gotoAndStop('up'); // up (animated?) } else if( event.keyCode == Keyboard.DOWN ) { isUp=false; character.gotoAndStop('down'); // down (animated?) } else if( event.keyCode == Keyboard.LEFT ) { if( isUp ) character.gotoAndStop('left'); // (up)left else character.gotoAndStop('downleft'); // downleft } else if( event.keyCode == Keyboard.RIGHT ) { if( isUp ) character.gotoAndStop('right'); // (up)right else character.gotoAndStop('downright'); // downright } } stage.addEventListener(KeyboardEvent.KEY_UP, upKey); function upKey(event:KeyboardEvent) { if( event.keyCode == Keyboard.RIGHT || event.keyCode == Keyboard.LEFT ) { if( isUp ) character.gotoAndStop('up'); // up (fix?) else character.gotoAndPlay('down'); // down (fix?) } } I tried to do something as close as possible to your original code. But it's yet a very simple solution that doesn't handle multi-key pressed at the same time etc... And obviously you should consider different keyframes for fixed and animated "up" and "down". I supposed that your bools were globals so I reduced it to one because it doesn't seems useful in this portion of code, but indeed you can re-introduce the other bools if needed elsewhere.