Look me マウスの動きを目玉たちが見ます。 t2421 forked:0favorite:0lines:124license : MIT License modified : 2010-12-14 22:34:36 Embed Tweet package { import flash.display.Sprite; import flash.events.Event; /** * ... * @author taiga */ public class Main extends Sprite { private var balls:/*Ball*/Array; private var numBalls:uint = 20; public function Main():void { init(); } private function init():void { KamibanaTool.setStageInfo(stage); balls = []; for (var i:int = 0; i < numBalls; i++) { var ball:Ball = new Ball(Math.random() * 30 + 10, Math.random() * 0xffffff); var dot:Ball = new Ball(ball.radius / 5, 0x000000); ball.addChild(dot); addChild(ball); ball.x = stage.stageWidth * Math.random(); ball.y = stage.stageHeight * Math.random(); dot.x = ball.radius - 5; balls.push(ball); } addEventListener(Event.ENTER_FRAME, enterFrameHandler); } private function enterFrameHandler(e:Event):void { for (var i:int = 0; i < numBalls; i++) { var ball:Ball = balls[i]; ball.rotation = KamibanaTool.getFaceToTargetRotation(ball, mouseX, mouseY); } } } } import flash.display.Sprite; class Ball extends Sprite { public var vx:Number; public var vy:Number; private var _radius:Number; private var _color:Number; public function Ball(radius:Number=10,color:uint=0xff0000) { _radius = radius; _color = color; update(); } private function update():void { graphics.clear(); graphics.beginFill(color); graphics.drawCircle(0, 0, radius); graphics.endFill(); } public function setRadius(radius:Number):void { _radius = radius; update(); } public function setColor(color:uint):void { _color = color; update(); } public function get radius():Number { return _radius; } public function get color():Number { return _color; } } class KamibanaPhysics { static public function radianToRotaion(radian:Number):Number { var angle:Number = radian * 180 / Math.PI; return angle; } static public function rotationToRadian(angle:Number):Number { var radian:Number = angle * Math.PI / 180; return radian; } } import flash.display.DisplayObject; import flash.display.Stage; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.geom.Point; class KamibanaTool { static public function getDistance(x2:Number, x1:Number, y2:Number, y1:Number):Number { var dx:Number = x2 - x1; var dy:Number = y2 - y1; var dist:Number = Math.sqrt(dx * dx + dy * dy); return dist; } static public function getStageCenter(stage:Stage):Point { var centerX:Number = stage.stageWidth / 2; var centerY:Number = stage.stageHeight / 2; return new Point(centerX, centerY); } static public function placeStageCenter(stage:Stage,object:DisplayObject):void { object.x = stage.stageWidth / 2; object.y = stage.stageHeight / 2; } static public function setStageInfo(stage:Stage):void { stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT; } static public function getFaceToTargetRotation(targetObject:DisplayObject,targetX:Number, targetY:Number):Number { var dx:Number = targetX - targetObject.x; var dy:Number = targetY - targetObject.y; var rotation:Number = KamibanaPhysics.radianToRotaion(Math.atan2(dy, dx)); return rotation; } } Code Fullscreen Preview Fullscreen atan2 study 初心者 StageScaleMode.NO_SCALE Math.atan2 Math.sqrt Math.PI Point push Event.ENTER_FRAME Event Math.random Array uint int Number