【碰撞回弹】

/*
舞台上有个mc
*/
package 
{
	import flash.display.Sprite;
	import flash.events.Event;

	public class Bouncing extends Sprite
	{
		private var ball:Ball;
		private var vx:Number;
		private var vy:Number;
		//弹力系数有所损耗所以为-0.7不计损耗为-1
		private var bounce:Number = -0.7;

		public function Bouncing()
		{
			init();
		}

		private function init():void
		{
			ball = new Ball  ;
			ball.x = stage.stageWidth / 2;
			ball.y = stage.stageHeight / 2;
			vx = Math.random() * 20 - 10;
			vy = Math.random() * 20 - 10;
			addChild(ball);
			addEventListener(Event.ENTER_FRAME,onEnter);
		}

		private function onEnter(e:Event):void
		{
			ball.x +=  vx;
			ball.y +=  vy;
			var left:Number = 50;
			var right:Number = stage.stageWidth - 50;
			var up:Number = 50;
			var down:Number = stage.stageHeight - 50;
			if (ball.x + ball.radius > right)
			{
				ball.x = right - ball.radius;
				vx *=  bounce;
			}
			else if (ball.x - ball.radius < left)
			{
				ball.x = left + ball.radius;
				vx *=  bounce;
			}
			if (ball.y + ball.radius > down)
			{
				ball.y = down - ball.radius;
				vy *=  bounce;
			}
			else if (ball.y - ball.radius < up)
			{
				ball.y = up + ball.radius;
				vy *=  bounce;
			}
			
			//判断ball碰到mc之后怎么办
			if (ball.hitTestObject(mc))
			{
				var dx:Number = ball.x - mc.x;
				var dy:Number = ball.y - mc.y;
				var dist:Number = Math.sqrt(dx * dx + dy * dy);
				var radians:Number = Math.atan2(dy,dx);//弧度
				var drgress:Number=radians*180/Math.PI;//弧度转化成度
				//(radians=drgress/(180/Math.PI)||radians=drgress/180*Math.PI)
				//trace(drgress);
				//vx = Math.cos(radians) * speed;
				//vy = Math.sin(radians) * speed;
				if(drgress<45&&drgress>-45)
				{
					ball.x=mc.x+mc.width/2+ball.width/2
					vx *=  bounce;
				}
				else if ((drgress>-180&&drgress<-135)||(drgress<180&&drgress>135))
				{
					ball.x=mc.x-mc.width/2-ball.width/2
					vx *=  bounce;
				}
				
				if (drgress>-135&&drgress<-45)
				{
					ball.y=mc.y-mc.height/2-ball.height/2
					vy *=  bounce;
				}
				else if(drgress<135&&drgress>45)
				{
					ball.y=mc.y+mc.height/2+ball.height/2
					vy *=  bounce;
				}
			
			}

		}
	}

}
package 
{

	import flash.display.Sprite;

	public class Ball extends Sprite
	{

		public var radius:Number;
		public var color:uint;

		public function Ball(radius:Number=10,color:uint=0Xff0000)
		{
			this.radius = radius;
			this.color = color;
			draw();
		}

		public function draw():void
		{
			graphics.beginFill(color);
			graphics.drawCircle(0,0,radius);
			graphics.endFill();
		}

	}

}
posted on 2011-03-23 09:54  602147629  阅读(214)  评论(0编辑  收藏  举报