您的位置:首页 > 其它

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

2010-03-08 10:35 369 查看
在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 爱好者,一定不要错过那里。会学到很多知识,增加自己的见识。个人而言,会继续去学习那里的技巧。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: