マルチオブジェクト回転

2299 ワード

ドキュメントクラス
package {
	import flash.display.Sprite;
	import flash.events.Event;

	import flash.events.MouseEvent;

	/**
	 * ...
	 * @author zkl
	 */
	public class Rotate extends Sprite {
		private var balls:Array;
		private var numBalls:Number = 10;
		private var radius:Number = 100;
		private var colors:Array=[0xFF0000,0x00FF00,0x0000FF,0x33CC00,0x9900FF,0xCC6600]

		public function Rotate(){
			init();
		}

		private function init():void {
			// (360 / numBalls * Math.PI / 180)
			var an:Number = 2 / numBalls * Math.PI;
			balls = new Array;
			for (var i:int = 0; i < numBalls; i++){
				var ball:Ball = new Ball(20,colors[int(Math.random()*numBalls)]);
				balls.push(ball);
				addChild(ball);
				// , 
				ball.x = Math.cos(an * i) * radius + stage.stageWidth / 2;
				ball.y = Math.sin(an * i) * radius + stage.stageHeight / 2;
				ball.addEventListener(MouseEvent.MOUSE_OVER, mouseHandler);
			}
			addEventListener(Event.ENTER_FRAME, enterFrame);
		}

		private function enterFrame(e:Event):void {
			var angle:Number = (mouseX - stage.stageWidth / 2) * .001;
			var cos:Number = Math.cos(angle);
			var sin:Number = Math.sin(angle);
			for (var i:int = 0; i < numBalls; i++){
				var ball:Ball = balls[i];
				var x1:Number = ball.x - stage.stageWidth / 2;
				var y1:Number = ball.y - stage.stageHeight / 2;
				var x2:Number = cos * x1 - sin * y1;
				var y2:Number = cos * y1 + sin * x1;
				ball.x = stage.stageWidth / 2 + x2;
				ball.y = stage.stageHeight / 2 + y2;
			}
		}

		private function mouseHandler(e:MouseEvent):void {
			switch (e.type){
				case MouseEvent.MOUSE_OVER:
					removeEventListener(Event.ENTER_FRAME, enterFrame);
					e.target.addEventListener(MouseEvent.MOUSE_OUT, mouseHandler);
					break;
				case MouseEvent.MOUSE_OUT:
					addEventListener(Event.ENTER_FRAME, enterFrame);
					e.target.removeEventListener(MouseEvent.MOUSE_OUT, mouseHandler);
					break;
			}
		}


	}

}