package { import flash.display.*; import flash.text.*; import flash.filters.*; import flash.geom.*; import caurina.transitions.Tweener;//这里引用的是一个名为Tweener的开源Action框架 public class TextParticle extends Sprite { private var bd:BitmapData; public function TextParticle(mytext:String):void { var tf:TextField = new TextField();//用于字体显示 tf.textColor=0x000000;//字体颜色 tf.text=mytext;//从构造函数的参数中获取值 tf.autoSize = "left";//控制文本字段的自动大小调整和对齐 bd=new BitmapData(tf.width,tf.height,false,0x3399ff);//将一个TextField对象作为图像Source bd.draw(tf);//在位图图像上绘制字体,显示对象 bd.applyFilter(bd, bd.rect, new Point(), new BlurFilter(4,3,10));//添加滤镜 bd.draw(tf); //核心部分 for (var i:int = 0; i < bd.width; i++) { for (var j:int = 0; j < bd.height; j++) { var num:Number= (i + j ) / 5 * Math.random(); Tweener.addTween( randomize(addChild(new Circle(bd.getPixel(i, j)))), /*将db中的source的每个pixel取出然后经过Circle处理颜色部分, 添加到画布中,然后通过randomize方法处理坐标部分*/ { x: i * 5,//Silde上面的MovieClip到一个新的坐标 y: j * 5, alpha:1 , delay: num,//让movieClip按照一定的时间间隔相继填充 time: 2//Slide a movieclip to a new position in 2 seconds } ); } } } /* 此方法设定粒子初始位置 */ private function randomize(d:DisplayObject):DisplayObject { d.x=400*Math.random(); d.y=300*Math.random(); d.alpha=0; return d; } } } import flash.display.Sprite; class Circle extends Sprite { public function Circle(color:uint):void {//这个color为source当前像素的颜色 graphics.beginFill(color); graphics.drawCircle(0,0,3);//绘制一个半径为3的圆 graphics.endFill(); } }