flint 例子库下砸地址
http://code.google.com/p/flint-particle-system/downloads/list
用法:
流程 :
可以将ermitter对象看成是一种发射器 而渲染环境则是发射器所在的环境 用initializers初始化函数来确定粒子的 速度 位置以及粒子的 形态
首先要导入类:
import flash.geom.Point; import org.flintparticles.common.counters.*; import org.flintparticles.common.displayObjects.RadialDot; import org.flintparticles.common.initializers.*; import org.flintparticles.twoD.actions.*; import org.flintparticles.twoD.emitters.Emitter2D; import org.flintparticles.twoD.initializers.*; import org.flintparticles.twoD.renderers.*; import org.flintparticles.twoD.zones.*;
Ermitter 粒子发射器
创建:
var ermitter :Emitter2D = new Emitter2D()//创建二维的ermitter对象
下面是渲染环境的创建:用到的渲染环境是DisplayObjectRender 这种渲染环境
var render :DisplayObjectRender= new DisplayObjectRender()
//将渲染环境放入舞台:
addChild(render);
//将发射器放入渲染环境中
render.addErmitter(ermitter);
Counter (类似于flash中的帧) 作用创建新的粒子
emitter.counter = new Steady( 100 ); // 表示每秒创建100个粒子
Initializers 函数 作用是确定;粒子出现在屏幕上的区域位置 粒子的表现形态 颜色 运动速度(包含大小和方向)
下面是粒子的表现形态的创建
我们可以用图片作为例子的表现形态 假如图片的实例名为 photo 我们可以这样创建:
var imgClass :ImageClass = new ImageClass(photo);
下面我们创建 表现形态不使用外部图片 使用flint 内置的 RadialDot 类(渐变的圆形)
下面创建一个半径为2的圆点
var imgClass:ImageClass = new ImageClass(RadiaDot,2);// 后面的2 是该圆点半径的大小
// 下面将这种表现形态 imgClass 放入发射器ermitter中
ermitter.addInitializer(imgClass);
我们也可以直接一步到位:
emitter.addInitializer( new ImageClass( RadialDot, 2 ) );
使用Zone 来确定粒子位置区域 和它的速度 :
位置Position 的确定需要使用区域Zone , 在 org.flintparticles.twoD.zones 包里有定义各种各样的区域Zone 。
Zone 的区域就是粒子出现在屏幕上的位置:
下面我们使用 LineZone ,让粒子从舞台的上方落下来
// 创建区域:
var zone :LineZone = new LineZone(new Point(-5,-5), new Point(505,-5)); // 舞台的宽式500pixel
//位置的创建
var position:Position = new Position (zone);
//下面将位置放入发射器之中
ermitter.addInitializer(position);
下面我们来确定速度的大小和方向 用到的是 PointZone 即它只有一个点 它和原点(0,0)组成一个向量 该向量的方向就是粒子速度的方向,速度的大小就是向量的大小 (注意:单位是像素)。
下面是速度的创建方法:
var pointZone :PointZone = new PointZone(new Point(0,65));// 速度的方向垂直向下,大小为65像素
var velocity:Velocity = new Velocity(pointZone);
//将其放入发射器ermitter中
ermitter.addInitializer(velocity);
也可以这样写:
emitter.addInitializer( new Velocity( new PointZone( new Point( 0, 65 ) ) ) );
有了上诉的准备 我们还需要添加动作Action
Action 的作用是更新每帧粒子的位置 它的用法相当简单 如下:
var move :Move = new Move(); //创建动作
//放入到ermitter发射器中
ermitter.addAction(move);
或者直接这样写:
ermitter.addAction( new Move() );
//最后加上
ermitter.start()// 进行发射粒子.
整个代码如下:
import flash.geom.Point; import org.flintparticles.common.counters.*; import org.flintparticles.common.displayObjects.RadialDot; import org.flintparticles.common.initializers.*; import org.flintparticles.twoD.actions.*; import org.flintparticles.twoD.emitters.Emitter2D; import org.flintparticles.twoD.initializers.*; import org.flintparticles.twoD.renderers.*; import org.flintparticles.twoD.zones.*; var emitter:Emitter2D = new Emitter2D(); var renderer:DisplayObjectRenderer = new DisplayObjectRenderer(); addChild( renderer ); renderer.addEmitter( emitter ); emitter.counter = new Steady( 100 ); emitter.addInitializer( new ImageClass( RadialDot, 2 ) ); emitter.addInitializer( new Position( new LineZone( new Point( -5, -5 ), new Point( 505, -5 ) ) ) ); emitter.addInitializer( new Velocity( new PointZone( new Point( 0, 65 ) ) ) ); emitter.addAction( new Move() ); emitter.start();续......