Free ActionScript

Flash AS2 & AS3 Tutorials, Game Code, Effects, Source Files & Sample Downloads

8-way keyboard movement with rotation & velocity

No Comments »

This is an optimized AS3 version of the old movement code.

AS3 8-way keyboard player movement with rotation and velocity script.

Click and use Arrow Keys to move:

View Code ACTIONSCRIPT
/**
 * Player Movement - 8-way keyboard with velocity
 * ---------------------
 * VERSION: 1.0
 * DATE: 9/23/2010
 * AS3
 * UPDATES AND DOCUMENTATION AT: http://www.FreeActionScript.com
 **/
package  
{
    import flash.display.MovieClip;
    import flash.events.Event;
    import flash.events.KeyboardEvent;
    import flash.ui.Keyboard;
 
    public class Main extends MovieClip
    {        
        // player
        private var _player:MovieClip;
 
        // player settings
        private var _maxSpeed:Number = 5;
        private var _rotationSpeed:Number = 5;
        private var _thrust:Number = .5;
        private var _decay:Number = .97;        
 
        private var _currentSpeed:Number = 0;
        private var _speedX:Number = 0;
        private var _speedY:Number = 0;
 
        // movement flags
        private var _movingUp:Boolean = false;
        private var _movingLeft:Boolean = false;
        private var _movingRight:Boolean = false;
 
        /**
         * Constructor
         */
        public function Main() 
        {
            createPlayer();
 
            // add listeners
            stage.addEventListener(Event.ENTER_FRAME, enterFrameHandler);            
            stage.addEventListener(KeyboardEvent.KEY_DOWN, myOnPress);
            stage.addEventListener(KeyboardEvent.KEY_UP, myOnRelease);            
        }
 
        /**
         * Creates player
         */
        private function createPlayer():void
        {
            _player = new Player();
            _player.x = stage.stageWidth / 2;
            _player.y = stage.stageHeight / 2;
            stage.addChild(_player);
        }
 
        /**
         * EnterFrame Handlers
         */
        private function enterFrameHandler(event:Event):void
        {
            // Rotate right or left
            if (_movingRight)
            {
                _player.rotation += _rotationSpeed;
            }
            if (_movingLeft)
            {
                _player.rotation -= _rotationSpeed;
            }
            if (_movingUp)
            {
                _speedX += _thrust * Math.sin(_player.rotation * (Math.PI / 180));
                _speedY += _thrust * Math.cos(_player.rotation * (Math.PI / 180));
            } 
            else{
                // Deccelerate when Up Arrow key is released
                _speedX *= _decay;
                _speedY *= _decay;
            }
 
            // Maintain speed limit
            _currentSpeed = Math.sqrt((_speedX * _speedX) + (_speedY * _speedY));
 
            if (_currentSpeed > _maxSpeed)
            {
                _speedX *= _maxSpeed/_currentSpeed;
                _speedY *= _maxSpeed/_currentSpeed;
            }
 
            // Move _player based on calculations above
            _player.y -= _speedY;
            _player.x += _speedX;
        }
 
        /**
         * Key Press Handlers
         */
        public function myOnPress(event:KeyboardEvent):void
        {
            switch( event.keyCode )
            {
                case Keyboard.UP:
                    _movingUp = true;
                    break;
 
                case Keyboard.LEFT:
                    _movingLeft = true;
                    break;
 
                case Keyboard.RIGHT:
                    _movingRight = true;
                    break;
            }
        }
 
        /**
         * Key Release Handlers
         */
        public function myOnRelease(event:KeyboardEvent):void
        {
            switch( event.keyCode )
            {
                case Keyboard.UP:
                    _movingUp = false;
                    break;
 
                case Keyboard.LEFT:
                    _movingLeft = false;
                    break;
 
                case Keyboard.RIGHT:
                    _movingRight = false;
                    break;
            }
        }
 
    }
 
}
Download Fla Sample

Download Fla Sample

Leave a Reply

You must be logged in to post a comment.