粒子系统
粒子系统表示三维计算机图形学中模拟一些特定的模糊现象的技术,而这些现象用其它传统的渲染技术难以实现的真实感的 game physics。经常使用粒子系统模拟的现象有火、爆炸、烟、水流、火花、落叶、云、雾、雪、尘、流星尾迹或者象发光轨迹这样的抽象视觉效果等等。OGengine开源引擎的粒子系统中包含粒子,粒子发射器,粒子修改器等表现粒子效果。这次做一个简单的粒子效果。
自定义了一个MyParticle的类
public void setMyParticle(float pX, float pY, TextureRegion region, Scene pScene)
复制代码
首先,我们需要选择一个点发射器,所以我们选择的是:
/**
* 点粒子发射器
* @param pCenterX 发射中心点X
* @param pCenterY 发射中心点Y*/
public PointParticleEmitter(
final float pCenterX, final float pCenterY)
复制代码
我们需要图片来创建粒子效果,所以我们选择SpriteParticleSystem
/**
* 精灵粒子系统
* @param pParticleEmitter 粒子发射器
* @param pRateMinimum:一秒中能同时发射到屏幕上的粒子最小的数量
* @param pRateMaximum:一秒中能同时发射到屏幕上的粒子最大的数量
* @param pParticlesMaximum:屏幕上允许可以存活的最大的粒子数
* @param pTextureRegion:选择表达的纹理*/
public SpriteParticleSystem(
final IParticleEmitter pParticleEmitter,
final float pRateMinimum,
final float pRateMaximum,
final int pParticlesMaximum,
final ITextureRegion pTextureRegion,
final VertexBufferObjectManager pVertexBufferObjectManager)
复制代码
接下来我们要对粒子做初始化并为其添加粒子修改器
/**粒子初始化*/
public void addParticleInitializer(final IParticleInitializer<T> pParticleInitializer)
/**添加粒子修改器*/
public void addParticleModifier (final IParticleInitializer<T> pParticleInitializer)
复制代码
以下就是各种类型粒子的构造函数
/**
* 速率粒子初始化器
* @param 最小速率X
* @param 最大速率X
* @param 最小速率Y
* @param 最大速率Y*/
public VelocityParticleInitializer(
final float pMinVelocityX, final float pMaxVelocityX,
final float pMinVelocityY, final float pMaxVelocityY)
复制代码
/**限时粒子初始化器
* @param pMinLifeTime 最小存在时间
* @param pMaxLifeTime 最大存在时间*/
public ExpireParticleInitializer(
final float pMinLifeTime, final float pMaxLifeTime)
复制代码
/**
* 缩放粒子修改器
* @pFromTime 开始时间
* @pToTime 结束时间
* @pFromScale 开始缩放值
* @pToScale 结束缩放值 */
public ScaleParticleModifier(
final float pFromTime, final float pToTime,
final float pFromScale, final float pToScale)
复制代码
/**
* 透明粒子修改器
* @pFromTime 开始时间
* @pToTime 结束时间
* @pFromScale 开始透明值
* @pToScale 结束透明值 */
public AlphaParticleModifier(
final float pFromTime, final float pToTime,
final float pFromAlpha, final float pToAlpha)
复制代码
源码:
public void setMyParticle(float pX, float pY, TextureRegion region, Scene pScene) {
PointParticleEmitter particleEmitter = new PointParticleEmitter(pX, pY);
SpriteParticleSystem mParticleSystem =
new SpriteParticleSystem(particleEmitter, 10, 10, 30, region, pScene.getVertexBufferObjectManager());
mParticleSystem.addParticleInitializer(
new VelocityParticleInitializer<Sprite>(-150,150, -380, 0));
mParticleSystem.addParticleInitializer(
new ExpireParticleInitializer<Sprite>(5f, 6f));
mParticleSystem.addParticleModifier(
new ScaleParticleModifier<Sprite>(0f, 5f, 0, 1.3f));
mParticleSystem.addParticleModifier(
new AlphaParticleModifier<Sprite>(0.8f, 1, 0.2f, 1f));
pScene.attachChild(mParticleSystem);
}
复制代码
添加好效果后,将方法放在Scene中进行调用
MyParticle myParticle = new MyParticle();
myParticle.setMyParticle(
this.getCameraWidth()/2, this.getCameraHeight()*0.8f, ballRegion,
TestScene.this);
复制代码
http://www.eoeandroid.com/forum-863-1.html
原文:http://9165326.blog.51cto.com/9155326/1439322