flash on 2010-3-28

by Pyr0Byt3
♥0 | Line 123 | Modified 2012-06-15 08:21:13 | MIT License
play

ActionScript3 source code

/**
 * Copyright Pyr0Byt3 ( http://wonderfl.net/user/Pyr0Byt3 )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/wooy
 */

package {
    import flash.display.*;
    import flash.events.Event;
    import flash.events.KeyboardEvent;
    import flash.ui.Keyboard;
    
    [SWF(width="450", height="450", frameRate="30", backgroundColor="0xffffff")]
    
    public class Platformer extends Sprite {
        private var maxSpeed:Number = 10;
        private var gravity:Number = 0;
        private var acceleration:Number = 1;
        private var friction:Number = 0.75; //less is more
        private var gridSize:Number = 50;
        
        private var map1:Array = [[ 0,  0,  0,  0,  0,  0,  0,  0,  0],
                                  [ 0,  0,  0,  0,  0,  0,  0,  0,  0],
                                  [ 0,  0,  0,  0,  0,  0,  0,  0,  0],
                                  [ 0,  0,  0,  0,  0,  0,  0,  0,  0],
                                  [ 0,  0,  0,  0,  0,  0,  0,  0,  1],
                                  [ 0,  0,  0,  0,  0,  0,  0,  1,  1],
                                  [ 0,  0,  0,  0,  0,  0,  1,  1,  1],
                                  [ 0,  0,  0,  0,  0,  1,  1,  1,  1],
                                  [ 1,  1,  1,  1,  1,  1,  1,  1,  1]];
        
        private var currentMap:Array = map1;
        
        private var player:MovieClip = new MovieClip();
        private var keys:Array = [false, false, false, false]; //up, down, left, right
        
        public function Platformer() {
            init();
        }
        
        private function init():void {
            drawMap(map1, 1, 0);
            addEventListener(Event.ENTER_FRAME, onEnterFrame);
            stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);
            stage.addEventListener(KeyboardEvent.KEY_UP, onKeyUp);
        }

        public function onEnterFrame(e:Event):void {
            if (Math.abs(player.xVel) < maxSpeed){
                if (keys[0]) {
                    player.yVel -= acceleration;
                }
                if (keys[1]) {
                    player.yVel += acceleration;
                }
                if (keys[2]) {
                    player.xVel -= acceleration;
                }
                if (keys[3]) {
                    player.xVel += acceleration;
                }
            }
            
            if (!(keys[0] || keys[1] || keys[2] || keys [3])) {
                player.xVel *= friction;
            }

            player.yVel += gravity;
            player.x += player.xVel;
            player.y += player.yVel;
        }

        public function onKeyDown(e:KeyboardEvent):void {
            switch (e.keyCode) {
                case Keyboard.UP :
                    keys[0] = true;
                    break;
                case Keyboard.DOWN :
                    keys[1] = true;
                    break;
                case Keyboard.LEFT :
                    keys[2] = true;
                    break;
                case Keyboard.RIGHT :
                    keys[3] = true;
                    break;
                default :
                    break;
            }
        }
        
        public function onKeyUp(e:KeyboardEvent):void {
            switch (e.keyCode) {
                case Keyboard.UP :
                    keys[0] = false;
                    break;
                case Keyboard.DOWN :
                    keys[1] = false;
                    break;
                case Keyboard.LEFT :
                    keys[2] = false;
                    break;
                case Keyboard.RIGHT :
                    keys[3] = false;
                    break;
                default :
                    break;
            }
        }
        
        public function applyGravity(thing:Sprite):void {
            //thing.y
        }

        
        public function drawMap(mapArray:Array, playerXTile:Number, playerYTile:Number):void {
            while (numChildren > 0) {
                removeChildAt(0);
            }
            for (var i:Number = 0; i < mapArray[0].length; i++) {
                for (var j:Number = 0; j < mapArray.length; j++) {
                    if (currentMap[j][i] == 1) {
                        var level:Sprite = new Sprite();
                        var solidTile:Sprite = new Sprite();
                        solidTile.graphics.beginFill(0x000000);
                        solidTile.graphics.drawRect(0, 0, gridSize, gridSize);
                        solidTile.graphics.endFill();
                        solidTile.x = i * gridSize;
                        solidTile.y = j * gridSize;
                        level.addChild(solidTile);
                        addChild(level);
                    }
                }
            }
            player.graphics.beginFill(0xff0000);
            player.graphics.drawRect(0, 0, 25, 50);
            player.graphics.endFill();
            player.x = playerXTile * gridSize;
            player.y = playerYTile * gridSize;
            player.xVel = 0;
            player.yVel = 0;
            addChild(player);
        }
    }
}