Look me
マウスの動きを目玉たちが見ます。
♥0 |
Line 124 |
Modified 2010-12-14 22:34:36 |
MIT License
archived:2017-03-20 16:53:13
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;
}
}