[부딪쳐 튕김]

2799 단어
/*

     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();

		}



	}



}

좋은 웹페이지 즐겨찾기