在wonderfl 网站当中,有很多创意的flash 程序,呈现的视角效果能够给予很高的启发性。今天,又要继续学习flash 技术,把在哪里看到的东西记录一下,这种位图应用可以变化出很多神奇的效果。一个像素可以当作一个微小的粒子处理,我们可以采用设置像素点位置的方式,对空白的位图数据进行设置点,这些点会分布在位图上,呈现出色彩奔放的效果。
接下来,记录一下在哪里看到的程序。大部分过程都来源于哪里。仅仅改造了一些。提到粒子,我想到一个粒子模型,这个粒子模型是一个结构,暂时没有办法可以总结他出来,只是隐约有这样想法,粒子模型当中,可以包含坐标,角度,颜色值。等等设置。其他参数如下面。
//简单的粒子模型 internal class Particle { public var x:Number; public var y:Number; public var radius:Number=0;//半径 public var color:uint;//颜色 public var vr:Number; public var angle:Number; public function Particle() { } }
这个模型当中,我们会记录他的位置,颜色,和角度。这样一来,我们把他作为一个对象那样进行创建。
我们需要随机创建每一个像素粒子。如下
private function creatSprite():void { //创建多个像素点 for (var i:int=0; i<300; i++) { var p:Particle=new Particle(); p.vr=Math.random()*45; p.color=0xffffff; p.angle=Math.random()*2*Math.PI; particles.push(p); } }
设置他的角度,颜色 还是一些初始参数,这样下来我们借用setPixel(x,y,color);这个函数来设置每一个点了。看起来非常简单,用起来也很简单。但是有一点是,通过借鉴他的一种做法,我们了解到这些方法应用变化。
粒子创建完成,采用数组进行保存。进行动画过程。采用圆的分布方式设置动画,或者其他方式设置,这样的方式可以自由搭配。而这次我们则采用圆的方式进行。向中心散发。同样,在借鉴这个程序的时候,结合滤镜的应用,产生很多不错效果。看起来很酷。如下图:
代码清单:
package { import flash.display.Sprite; import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.PixelSnapping; import flash.display.BlendMode; import flash.events.*; import flash.geom.*; import flash.filters.*; public class Main extends Sprite { private var bmp:BitmapData=new BitmapData(550,400,false,0x000000); private var particles:Array=[];//粒子数组 private var startX:Number; private var startY:Number; //private var pen:BitmapData=new BitmapData(1,1); public function Main() { init(); } private function init():void { var bitmap:Bitmap=addChild(new Bitmap(bmp)) as Bitmap; bitmap.blendMode=BlendMode.ADD; addEventListener(Event.ENTER_FRAME,Run); stage.addEventListener(MouseEvent.CLICK,onClick); } private function Run(event:Event):void { update(); } private function onClick(event:MouseEvent):void { startX=mouseX; startY=mouseY; creatSprite(); } //创建图形 private function creatSprite():void { //创建多个像素点 while(particles.length>0)particles.pop(); for (var i:int=0; i<1000; i++) { var p:Particle=new Particle(); p.vr=Math.random()*45; p.color=0xffffff; p.angle=Math.random()*2*Math.PI; particles.push(p); } } private function update():void { bmp.lock(); bmp.applyFilter(bmp,new Rectangle(0,0,stage.stageWidth,stage.stage.stageHeight),new Point(),new BlurFilter(2,2)); for(var i:int=0;i<particles.length;i++) { var p:Particle=particles[i]; p.vr*=0.8; p.radius+=p.vr;//递增他的半径 p.x=startX+p.radius*Math.cos(p.angle);//按圆进行分布x坐标 p.y=startY+p.radius*Math.sin(p.angle);//按圆的方式分布y坐标 bmp.setPixel(p.x,p.y,p.color);//设置像素点的位置 } bmp.unlock(); //pen.draw(bmp,new Matrix(0.25,0,0,0.25)); } } } //简单的粒子模型 internal class Particle { public var x:Number; public var y:Number; public var radius:Number=0;//半径 public var color:uint;//颜色 public var vr:Number; public var angle:Number; public function Particle() { } }
小结:
这一篇文章,不足以说明位图结合效果的全部,在woderfl 网站里面包含很多有趣创意的程序,如果你是有心的flash 爱好者,一定不要错过那里。会学到很多知识,增加自己的见识。个人而言,会继续去学习那里的技巧。