粒子系统
粒子系统表示三维计算机图形学中模拟一些特定的模糊现象的技术,而这些现象用其它传统的渲染技术难以实现的真实感的 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
OGEngine_粒子效果
时间: 2024-10-21 07:25:51