矩阵烟花
package
{
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.events.Event;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.geom.ColorTransform;
import flash.filters.BlurFilter;
import flash.geom.Point;
[SWF(width="500",height="450")]
public class MyColorPicker extends Sprite
{
private var pixelNum:int = 500;
private var bm:Bitmap;
private var bmd:BitmapData;
private var container:Sprite;
private var pixelList:Array = new Array();
private var gravity:Number = 0.1;
private var ctf:ColorTransform = new ColorTransform(0.9, 0.96, 0.96);
private var bf:BlurFilter = new BlurFilter(6, 6, 2);
public function MyColorPicker()
{
init();
}
private function init():void
{
container = new Sprite();
container.x = 50;
container.y = 0;
addChild(container);
bmd = new BitmapData(400,400,true,0xff000000);
bm = new Bitmap( bmd );
container.addChild( bm );
container.addEventListener(MouseEvent.CLICK, onClick);
}
private function onClick(event:MouseEvent):void
{
fire(container.mouseX, container.mouseY);
}
private function fire( toX:Number, toY:Number ):void
{
for( var i:int=0; i<pixelNum; i++)
{
var vo:PixelVO = new PixelVO();
vo.xpos = toX;
vo.ypos = toY;
vo.speedX = 2 - Math.random() * 4;
vo.speedY = 1 - Math.random() * 4;
pixelList.push(vo);
}
if( !this.hasEventListener(Event.ENTER_FRAME) )
{
this.addEventListener(Event.ENTER_FRAME, onEF);
}
}
private function onEF(event:Event):void
{
bmd.lock();
bmd.colorTransform( bmd.rect, ctf );
bmd.applyFilter(bmd, bmd.rect, new Point(), bf);
for ( var i:int=0; i<pixelList.length; i++ )
{
var item:PixelVO = pixelList[i] as PixelVO;
item.xpos += item.speedX;
item.ypos += item.speedY;
item.speedY += gravity;
bmd.setPixel( item.xpos, item.ypos, 0xffffff );
if( item.ypos > 400 ){
pixelList.splice( i, 1 );
i--;
item = null;
}
}
bmd.unlock()
}
}
}
——————————————————————————————————————————————————————————————————————————
package
{
public class PixelVO
{
public var xpos:Number;
public var ypos:Number;
public var speedX:Number;
public var speedY:Number;
}
}