as3 模擬太空船

ship.as

package 
{
	import flash.display.Sprite;
	public class Ship extends Sprite
	{
		public function Ship()
		{
			draw(false);
		}
		public function draw(showFlame:Boolean):void
		{
			graphics.clear();
			graphics.lineStyle(1,0xffffff);
			graphics.moveTo(10,0);
			graphics.lineTo(-10,10);
			graphics.lineTo(-5,0);
			graphics.lineTo(-10,-10);
			graphics.lineTo(10,0);
            //是否顯示小尾巴
			if (showFlame)
			{
				graphics.moveTo(-7.5,-5);
				graphics.lineTo(-15,0);
				graphics.lineTo(-7.5,5);
			}
		}
	}
}

main.as

package  {
	
	import flash.display.MovieClip;
	import flash.events.Event;
	import flash.events.KeyboardEvent;
	import flash.ui.Keyboard;
	
	
	public class Lesson9 extends MovieClip {
		
		private var ship:Ship;
		
		private var vx:Number = 0;
		private var vy:Number = 0;
		private var vr:Number = 0;
		
		private var thrust:Number = 0;
		
		public function Lesson9() {
			ship = new Ship();
			addChild(ship);
			ship.x = this.stage.stageWidth / 2;
			ship.y = this.stage.stageHeight / 2;
			
			addEventListener(Event.ENTER_FRAME,enterframeHandler);
			stage.addEventListener(KeyboardEvent.KEY_DOWN,keydownHandler);
			stage.addEventListener(KeyboardEvent.KEY_UP,keyupHandler);
		}
		
		private function keydownHandler(e:KeyboardEvent):void{
			switch(e.keyCode){
				case Keyboard.UP:
					thrust = 0.2;
					ship.draw(true);
					break;
				case Keyboard.LEFT:
					vr = -5;
					break;
				case Keyboard.RIGHT:
					vr = 5;
					break;
				default:break;
			}
		}
		
		private function keyupHandler(e:KeyboardEvent):void{
			thrust = 0;
			ship.draw(false);
			vr = 0;
		}		
		
		private function enterframeHandler(e:Event):void{
			ship.rotation += vr;
			
			//處理加速
			var angle:Number = Math.PI * ship.rotation / 180;
			var ax:Number = Math.cos(angle) * thrust;
			var ay:Number = Math.sin(angle) * thrust;
			vx += ax;
			vy += ay;
			ship.x += vx;
			ship.y += vy;
		}
	}
	
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章