forked from: Flower
// forked from 12px's Flower
package
{
import flash.utils.Timer;
import flash.events.TimerEvent;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.geom.Point;
import flash.geom.ColorTransform;
import flash.filters.BlurFilter;
import flash.display.MovieClip;
import flash.display.Bitmap;
import flash.display.BitmapData;
[SWF(width="465", height="465", backgroundColor="0x000000", frameRate="30")]
public class Flower extends MovieClip
{
//----------------------------------------------------------------------------------------------------
// properties
private var _base:Object;
private var _prop:Object;
//----------------------------------------------------------------------------------------------------
// constructor
public function Flower()
{
startDrawing();
}
//----------------------------------------------------------------------------------------------------
// code
private function startDrawing():void
{
_base = this;
_prop = {};
_prop.bgColor = 0x000000;
_prop.pixelColor = 0xffffff;
_prop.defaultWidth = 465;
_prop.defaultHeight = 465;
_prop.ang = 12;
_prop.pAry = addParticle(1800);
//
_prop.bmd = new BitmapData( _prop.defaultWidth , _prop.defaultHeight , false , _prop.bgColor);
_prop.bm = new Bitmap( _prop.bmd );
_base.addChild(_prop.bm);
_base.addEventListener(Event.ENTER_FRAME, _onEnterFrame);
//
_base.stage.addEventListener(MouseEvent.MOUSE_UP, _onStageMouseUp);
//
_prop.timer = new Timer(2000);
_prop.timer.addEventListener(TimerEvent.TIMER, timerhandler);
_prop.timer.start();
}
private function _onStageMouseUp(e:MouseEvent):void
{
_prop.timer.reset();
_prop.timer.start();
update();
}
private function timerhandler(event:TimerEvent):void
{
update();
}
private function _onEnterFrame(event:Event):void
{
for(var i:int=10; i<_prop.pAry.length; i++){
if(i%2 == 1){
_prop.pAry[i].x = Math.cos(_prop.ang*i)*i*.1 + _prop.defaultWidth/2;
_prop.pAry[i].y = Math.sin(_prop.ang*i)*i*.1 + _prop.defaultHeight/2;
} else{
_prop.pAry[i].x = Math.sin(_prop.ang*i)*i*.1 + _prop.defaultWidth/2;
_prop.pAry[i].y = Math.cos(_prop.ang*i)*i*.1 + _prop.defaultHeight/2;
}
}
_prop.ang += .000001;
//
for(var ii:int=10; ii<_prop.pAry.length-1; ii++){
_prop.bmd.setPixel(_prop.pAry[ii].x, _prop.pAry[ii].y, _prop.pixelColor);
}
_prop.bmd.colorTransform( _prop.bmd.rect, new ColorTransform( 1, 1, 1, 1, (Math.random()*-2)-1, (Math.random()*-2)-1, (Math.random()*-2)-1, 1 ) );
_prop.bmd.applyFilter(_prop.bmd, _prop.bmd.rect, new Point(0, 0), new BlurFilter(2, 2, 4));
}
private function update():void
{
_prop.ang += randomNumberRange(1, 10);
};
// particle
private function addParticle(num:Number):Array
{
_prop.container = new MovieClip();
var ar:Array = [];
for(var i:int=0; i<num; i++){
var s:Object = {};
s.id = i;
ar.push(s);
}
return ar;
}
//----------------------------------------------------------------------------------------------------
//util
public static function randomNumberRange(min:Number, max:Number):Number { return min + Math.random()*(max+1 - min) };
//----------------------------------------------------------------------------------------------------
}
}