flash位图技术研究篇(7):像素粒子

本文介绍了一种使用Flash技术实现的像素粒子效果,通过创建大量随机分布的像素粒子,并结合动画和滤镜效果,实现了视觉冲击力强的画面效果。

  在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 爱好者,一定不要错过那里。会学到很多知识,增加自己的见识。个人而言,会继续去学习那里的技巧。

转载于:https://www.cnblogs.com/guoyiqi/archive/2010/03/08/2069199.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值