simple 2d terrian

by andyshang
for the group discuss
♥2 | Line 92 | Modified 2010-09-06 12:16:07 | MIT License
play

ActionScript3 source code

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

package
{
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.ui.Keyboard;
    
    //for the group discuss
    [SWF(width="465",height="465")]
    public class Main extends Sprite
    {
        private var sp:Sprite = new Sprite;
        private var step:Number = 6;
        private var halfStep:Number = 3;
        private var terrian:Array = [];
        
        public function Main()
        {
            sp.graphics.beginFill(0,1);
            sp.graphics.drawRect(-20,-10,40,10);
            addChild(sp);
            
            createTerrian();
            
            var key:KeyManager = new KeyManager();
            key.listen(stage);
            
            addEventListener(Event.ENTER_FRAME, function():void
            {
                if(key.isDown(Keyboard.LEFT))
                {
                    sp.x -=2;
                    if(sp.x < 0)
                    {
                        sp.x = 0
                    }
                }
                if(key.isDown(Keyboard.RIGHT))
                {
                    sp.x +=2;
                    if(sp.x > 465)
                    {
                        sp.x = 465
                    }
                }
                var currentY:Number = getTerrian(sp.x)
                if(currentY > sp.y)
                {
                    sp.y +=5;
                }
                if(currentY <= sp.y)
                {
                    sp.y = currentY
                }
                sp.rotation = -180*Math.atan2(getTerrian(sp.x-halfStep) - getTerrian(sp.x+halfStep),step)/Math.PI;
            });
        }
        
        public function createTerrian():void
        {
            graphics.lineStyle(2,0);
            graphics.moveTo(0,250);
            for(var i:int=0;i<465/halfStep;i++)
            {
                terrian[i] = 250 + 20 * Math.sin(i/30);
                graphics.lineTo(i*halfStep, terrian[i]);
            }
        }
        
        public function getTerrian(x):Number
        {
            return terrian[int(x/halfStep)]
        }
    }
}
import flash.display.Stage;
import flash.events.KeyboardEvent;

class KeyManager
{
    private var _isDownFunc:Function;
    private var downKeys:Vector.<int> = new Vector.<int>(256);
    
    public function listen(stage:Stage):void
    {            
        stage.addEventListener(KeyboardEvent.KEY_DOWN, function(event:KeyboardEvent):void
        {
            downKeys[event.keyCode] = 1;
        })
        
        stage.addEventListener(KeyboardEvent.KEY_UP, function(event:KeyboardEvent):void
        {
            downKeys[event.keyCode] = 0;
        })
        
        _isDownFunc = function(keyCode:int):Boolean
        {
            return downKeys[keyCode] > 0;
        }
    }
    
    public function isDown(keyCode:int):Boolean
    {
        return _isDownFunc(keyCode);
    }
}