Look me

by t2421
マウスの動きを目玉たちが見ます。
♥0 | Line 124 | Modified 2010-12-14 22:34:36 | MIT License
play

ActionScript3 source code

/**
 * Copyright t2421 ( http://wonderfl.net/user/t2421 )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/gKxr
 */

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;
        }
        
        
    }