OGEngine_粒子效果
粒子系統
粒子系統表示三維計算機圖形學中模擬一些特定的模糊現象的技術,而這些現象用其它傳統的渲染技術難以實現的真實感的 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
www.ogengine.com
轉載于:https://blog.51cto.com/9165326/1439322
總結
以上是生活随笔為你收集整理的OGEngine_粒子效果的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php 之 post json 数据
- 下一篇: api.js