LoadingFlower
これに影響されて作ったよ。
*
* @see http://tirirenge.undo.jp/sample/fire.html
/**
* これに影響されて作ったよ。
*
* @see http://tirirenge.undo.jp/sample/fire.html
*/
package
{
import flash.display.BlendMode;
import flash.display.Sprite;
import flash.events.Event;
[SWF(frameRate=30, width=465, height=465, backgroundColor=0x000000)]
public class Main extends Sprite
{
public function Main()
{
addEventListener(Event.ADDED_TO_STAGE, initialize);
}
/**
* initialize the object.
*/
private function initialize(evt:Event):void
{
removeEventListener(Event.ADDED_TO_STAGE, initialize);
var i:uint,
c:uint,
l:Loading;
for (i=0; i<30; i++)
{
c = Math.floor(Math.random() * 256) << 16
| Math.floor(Math.random() * 256) << 8
| Math.floor(Math.random() * 256);
l = new Loading(
c,
Math.ceil(Math.random() * 10),
Math.ceil(Math.random() * 30),
Math.ceil(Math.random() * 30),
Math.ceil(Math.random() * 50)
);
//l.blendMode = BlendMode.INVERT;
l.x = Math.floor(Math.random() * stage.stageWidth);
l.y = Math.floor(Math.random() * stage.stageHeight);
addChild(l);
}
}
}
}
import flash.display.Shape;
import flash.events.Event;
class Loading extends Shape
{
private var _color:uint;
private var _needleWidth:Number;
private var _needleLength:Number;
private var _numNeedles:uint;
private var _innerRadius:Number;
public function Loading(color:uint=0x000000,
needleWidth:Number=3,
needleLength:Number=10,
numNeedles:uint=15,
innerRadius:Number=20)
{
_color = color;
_needleWidth = needleWidth;
_needleLength = needleLength;
_numNeedles = numNeedles;
_innerRadius = innerRadius;
draw();
addEventListener(Event.ADDED_TO_STAGE, initialize);
}
public function draw():void
{
var i:uint,
cx:Number, cy:Number,
cAngle:Number,
nAngle:Number;
cAngle = -Math.PI / 2;
nAngle = Math.PI * 2 / _numNeedles;
graphics.clear();
for (i=0; i<_numNeedles; i++)
{
cAngle += nAngle;
graphics.lineStyle(_needleWidth, _color, i/(_numNeedles - 1));
cx = Math.cos(cAngle) * _innerRadius;
cy = Math.sin(cAngle) * _innerRadius;
graphics.moveTo(cx, cy);
cx = cx + Math.cos(cAngle) * _needleLength;
cy = cy + Math.sin(cAngle) * _needleLength;
graphics.lineTo(cx, cy);
}
}
private function initialize(evt:Event):void
{
removeEventListener(Event.ADDED_TO_STAGE, initialize);
addEventListener(Event.REMOVED_FROM_STAGE, finalize);
addEventListener(Event.ENTER_FRAME, step);
}
private function step(evt:Event):void
{
rotation = (rotation + 360 / stage.frameRate) % 360;
}
private function finalize(evt:Event):void
{
removeEventListener(Event.REMOVED_FROM_STAGE, finalize);
removeEventListener(Event.ENTER_FRAME, step);
}
}