覚え書きです。
package { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; import flash.events.TimerEvent; import flash.filters.BlurFilter; import flash.geom.ColorTransform; import flash.geom.Matrix; import flash.geom.Point; import flash.text.TextField; import flash.text.TextFieldAutoSize; import flash.text.TextFormat; import flash.utils.Timer; [SWF(width="500",height="500",backgroundColor="0")] public class particle_mozi extends Sprite { private var bmpd:BitmapData; //text private var bmp:Bitmap; private var canvas:BitmapData; //particle private var tf:TextField = new TextField(); private var particles:Vector.<particle> = new Vector.<particle>; private var colortf:ColorTransform; private var blur:BlurFilter = new BlurFilter(4,4,1); private var cnt:Number = 0; public function particle_mozi() { canvas = new BitmapData(500,500,false,0); bmpd = new BitmapData(500,500,false, 0); tf.defaultTextFormat = new TextFormat(null,80); tf.autoSize = TextFieldAutoSize.LEFT; colortf = new ColorTransform(0,0.9,0.98,0); addChild(new Bitmap(canvas)); // addChild(new Bitmap(bmpd)); onMouseEvent(); addEventListener(Event.ENTER_FRAME,onEnterFrame); stage.addEventListener(MouseEvent.CLICK,onMouseEvent); } private function onMouseEvent(e:MouseEvent = null):void{ particles.splice(0,particles.length); if(cnt % 3 == 0){ tf.textColor = 0x00ffff; tf.text = "Hello World!"; } if(cnt % 3 == 1){ tf.textColor = 0x0000ff; tf.text = "ahahahahaha"; } if(cnt % 3 == 2){ tf.textColor = 0x00ff00; tf.text = "ふにゃふにゃ"; } bmpd.draw(tf,new Matrix(1,0,0,1,(500-tf.width)/2,(500-tf.height)/2)); for(var i:int=0;i < bmpd.width;i++){ for(var j:int=0;j < bmpd.height;j++){ var c:uint = bmpd.getPixel(i,j); if(c != 0){ makeParticle(i,j,c); } } } cnt++; } private function onEnterFrame(e:Event = null):void{ bmpd.fillRect(bmpd.rect,0); var n:int = particles.length; canvas.fillRect(canvas.rect,0); canvas.applyFilter(canvas,canvas.rect,canvas.rect.topLeft,blur); canvas.colorTransform(canvas.rect,colortf); canvas.lock(); for(var i:int=0;i<particles.length;i++){ var p:particle = particles[i]; if(Math.abs(p.ex - p.xx) < 0.5 && Math.abs(p.ey - p.yy) < 0.5){ p.xx = p.ex; p.yy = p.ey; } else{ p.xx += (p.ex - p.xx) / 6; p.yy += (p.ey - p.yy) / 6; } canvas.setPixel(p.xx,p.yy,p.color); } canvas.unlock(); } private function makeParticle(xx:Number,yy:Number,color:Number):void{ var p:particle = new particle(xx,yy,color); var rad:Number = Math.random() * Math.PI * 2; var dis:Number = Math.random() * 800; p.xx = p.ex + dis * Math.cos(rad); p.yy = p.ey + dis * Math.sin(rad); particles.push(p); } } } class particle{ public var xx:Number; public var yy:Number; public var ex:Number; public var ey:Number; public var color:uint; public function particle(x:Number,y:Number,c:uint){ this.xx = 0; this.yy = 0; this.ex = x; this.ey = y; this.color = c; } }