simple 2d terrian
for the group discuss
♥2 |
Line 92 |
Modified 2010-09-06 12:16:07 |
MIT License
archived:2017-03-20 16:01:31
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);
}
}