鼠标控制元件移动带缓动 鼠标点击发射子弹

/*文档类 库中有一个ball元件*/
package 
{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;

	public class Main extends Sprite
	{
		private var ball:Ball;
		private var speed:Number;
		private var easing:Number = 0.05;
		private var mcArr:Array = new Array  ;
		private var fire_flag:Boolean;

		private var bulletArr:Array = new Array  ;
		private var bullet:Bullet;
		private var time:int;
		private var bradians:Number;


		public function Main()
		{
			addEventListener(Event.ADDED_TO_STAGE,addedToStage);
		}
		
		private function addedToStage(e:Event):void
		{
			init();
		}
		private function init():void
		{
			speed = 3;
			ball = new Ball  ;
			ball.x = 50;
			ball.y = 50;
			addChild(ball);
			
			stage.addEventListener(MouseEvent.MOUSE_DOWN,_onMouseDown);
			stage.addEventListener(MouseEvent.MOUSE_UP,_onMouseUp);
			addEventListener(Event.ENTER_FRAME,onEnter);
		}

		private function _onMouseDown(e:MouseEvent):void
		{
			fire_flag = true;
		}

		private function _onMouseUp(e:MouseEvent):void
		{
			time = 0;
			fire_flag = false;
			return;
		}

		private function onEnter(e:Event):void
		{
			if (fire_flag)
			{
				if (time == 0)
				{
					fire();
				}
				time++;
				if (time % 5 == 0)
				{
					fire();
				}
			}
			var dx:Number = mouseX - ball.x;
			var dy:Number = mouseY - ball.y;
			var radians:Number = Math.atan2(dy,dx);
			ball.rotation = radians * 180 / Math.PI;
			//var vx:Number = Math.cos(radians) * speed;
			//var vy:Number = Math.sin(radians) * speed;
			var vx:Number = dx * easing;
			var vy:Number = dy * easing;
			//trace(ball.rotation);
			ball.x +=  vx;
			ball.y +=  vy;
		}


		private function fire():void
		{
			var dx:Number = mouseX - ball.x;
			var dy:Number = mouseY - ball.y;
			var radians:Number = Math.atan2(dy,dx);
			//var angle:Number = radians * 180 / Math.PI;
			//radians=angle*Math.PI/180;
			bullet = new Bullet(radians,10,10,0XFF0000);
			bullet.x = ball.x;
			bullet.y = ball.y;
			addChild(bullet);
			bulletArr.push(bullet);
		}


	}
}
/*子弹类*/
package 
{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.display.Stage;

	public class Bullet extends Sprite
	{
		private var _width:Number;
		private var _height:Number;
		private var color:uint;
		private var bullet:Bullet;
		private var speed:Number;
		private var radians:Number;
		private var MinX:int;
		private var MaxX:int;
		private var MinY:int;
		private var MaxY:int;

		public function Bullet(radians:Number,_width:Number=10,_height:Number=10,color:uint=0XFF0000)
		{
			addEventListener(Event.ADDED_TO_STAGE,addedToStage);
			this._width = _width;
			this._height = _height;
			this.color = color;
			this.radians = radians;
		}

		private function addedToStage(e:Event):void
		{
			MinX = this.width / 2;
			MaxX = stage.stageWidth - this.width / 2;
			MinY = this.height / 2;
			MaxY = stage.stageHeight - this.height / 2;

			speed = 20;
			drawBullet();
			addEventListener(Event.ENTER_FRAME,enterFrameHandler);
		}

		private function drawBullet():void
		{
			graphics.beginFill(color);
			graphics.drawRect(0,0,_width,_height);
			graphics.endFill();
		}

		private function enterFrameHandler(e:Event):void
		{
			MoveAngle(radians);
			movingRange();
		}

		private function MoveAngle(radians:Number):void
		{
			this.rotation = radians * 180 / Math.PI;
			var vx:Number = Math.cos(radians) * speed;
			var vy:Number = Math.sin(radians) * speed;
			this.x +=  vx;
			this.y +=  vy;
		}

		private function movingRange():void
		{
			if (parent)
			{
				if (this.x < MinX)
				{
					removeEventListener(Event.ENTER_FRAME,enterFrameHandler);
					parent.removeChild(this);
				}
				else if (this.x > MaxX)
				{
					removeEventListener(Event.ENTER_FRAME,enterFrameHandler);
					parent.removeChild(this);
				}
				else if (this.y < MinY)
				{
					removeEventListener(Event.ENTER_FRAME,enterFrameHandler);
					parent.removeChild(this);
				}
				else if (this.y > MaxY)
				{
					removeEventListener(Event.ENTER_FRAME,enterFrameHandler);
					parent.removeChild(this);
				}
			}

		}


	}
}
posted on 2011-01-28 17:44  602147629  阅读(588)  评论(0编辑  收藏  举报