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; } } } } |

No Comments »