粒子編輯器的選擇

乎是沒得選,目前在windows上就發現了一款粒子編輯器,叫做cocos2d-windows-particle-editor。

cocos2d-windows-particle-editor

這是一個開源項目,你可以從下面的網址獲取。
http://code.google.com/p/cocos2d-windows-particle-editor/

編輯器屬性

粒子和發射器是粒子系統不可或缺的組成部分。發射器將大量粒子按照一定規律發射出去形成我們希望表現的效果。這個效果受發射方式,粒子屬性等的影響。所以,要對它們有一定的瞭解,使用起來才能得心應手。

下面我們根據實際需要講解部分屬性。

1.Mode

現有的發射器分爲兩種,一種是重力(Gravity)發射器,另一種是放射(狀)(Radius)發射器。

發射器的種類決定了它的工作方式。不同種類的發射器根據不同的屬性來決定由它發射出的粒子如何運動。可以說,Mode是發射器最重要的基礎屬性之一。

2.TotalParticles

該屬性決定了最多同時存活的粒子數量上限。這是一個峯值,主要目的是用來限制內存等資源的消耗。

3.EmissionRate

粒子的發射速率,即每秒發射的粒子數量。

這裏有一個問題,不知道算不算是bug,我給大家描述一下:

CCParticleSystem加載.plist文件時並沒有讀取這個EmissionRate的值。實際上,它是由粒子數量上限除以粒子生命期算出來的。

1 // emission Rate
2 m_fEmissionRate = m_uTotalParticles / m_fLife;

有點兒說不通對不對。我爲什麼要在(第一個)粒子的生命期內把所有的粒子都發出去?

這是CCParticleSystem加載.plist文件的問題,臨時的解決辦法就是,在加載.plist文件後,再手工調用setEmissionRate設置每秒的發射量。

雖說囉嗦了點兒,但比起純手動設置粒子系統屬性要簡單的多。

4.Duration

Duration表示發射器執行的時間,單位是秒。如果設置爲-1,那就表示發射器持續發射粒子。零是一個有效值,但是設置爲零就沒有意義了,不是嗎?

5.IsAutoRemoveOnFinish

發射完成後,是否刪除粒子系統,默認值爲False.

這裏存在一個已知的bug:

當IsAutoRemoveOnFinish爲True並且Duration不爲-1時,待粒子效果播放完畢後,粒子系統會自動刪除,導致編輯器不可用。

暫時的解決方法

關閉編輯器,然後重新打開。

6.PositionType

PositionType有3種取值:
(1)Free(自由)
粒子附屬於遊戲世界,並且不受發射器的位移影響。
(2)Relative(相對)
粒子附屬於遊戲世界,但是要跟隨發射器移動。
(3)Grouped(打組)
粒子附屬於發射器,並且跟隨發射器的變化而變化。

7.SourcePositionX, SourcePositionY

這兩個值表示發射器的原始座標。

8.PosVarX, PosVarY

發射器座標的浮動值。

9.Angle

粒子的發射角度。

10.AngleVar

粒子發射角度的浮動值。

11.Speed

粒子(初始)速度。

12.SpeedVar

粒子(初始)速度浮動值。

13.GravityX, GravityY

粒子在X軸和Y軸上的加速度。

14.RadialAccel

粒子的徑向加速度。

15.RadialAccelVar

粒子的徑向加速度浮動值。

16.TangentialAccel

粒子的切向加速度。

17.TangentialAccelVar

粒子的切向加速度浮動值。

18.StartRadius

初始半徑

19.StartRadiusVar

初始半徑浮動值

20.EndRadius

結束半徑

21.EndRadiusVar

結束半徑浮動值

22.RotatePerSecond

粒子圍繞初始點旋轉的角速度

23.RotatePerSecondPer

粒子圍繞初始點旋轉的角速度浮動值

上面講的都是發射器的屬性,下面我們來看看粒子自身的屬性。

24.Life, LifeVar

粒子的生命值及其浮動值。從創建粒子開始計時,一旦超出了生命期,粒子也就消失了。

25.StartSize

粒子的初始大小

26.StartSizeVar

粒子初始大小的浮動值

27.EndSize

粒子的結束大小。若爲-1,則表示結束大小與初始大小一致。

28.EndSizeVar

粒子結束大小的浮動值。

29.StartColor, EndColor, StartColorVar, EndColorVar這4個屬性代表着粒子的初始顏色、結束顏色以及其浮動值。

需要注意的是,在ccColor4F中每個顏色分量以及透明度都是用0.0f到1.0f表示的,而此編輯器使用的是0到255表示的,所以有時可能會產生小小的誤差。(筆者以前只學過一點兒OpenGL的皮毛,不太明白OpenGL裏那些換算後非整數的顏色分量是如何處理的。)

30.TexturePath

紋理貼圖的路徑,引擎會根據.plist文件的路徑以及此屬性判斷要加載的文件。一般來說,這裏要填相對路徑。

31.SrcBlendFunc, DestBlendFunc

設置紋理融合的方式,選項比較多,鑑於筆者的OpenGL水平,這裏不做深入。

對於一般情況,只需要記住:「我們最常使用的CC_BLEND_SRC和CC_BLEND_DST分別對應GL_ONE和GL_ONE_MINUS_SRC_ALPHA」。

32.IsBlendAdditive

暫時請忽略IsBlendAdditive這個屬性吧,cocos2d-x引擎里根本就沒讀取這個值。

33.StartSpin, EndSpin, StartSpinVar, EndSpinVar

粒子的初始自旋角度、結束自旋角度以及其浮動值。設置了這些值,粒子就開始自轉了,當然你需要合適的貼圖才能看得清楚。

34.IsBackgroundMove

設置左側預覽畫面的背景是否移動。

35.Scale

設置左側預覽畫面的縮放比。左側的圖像實際上是2倍顯示的,這裏設置成0.5左側顯示的就是原始大小。

注意,上面這兩個屬性隻影響編輯器內的預覽效果,不對保存的.plist文件產生影響

編輯器的使用

打開編輯器後,先從Sample菜單下選擇需要的基本配置,然後設置具體的屬性,最後另存爲.plist文件以供遊戲使用。

在cocos2d-x中加載.plist文件非常簡單。假設我們將知易第七章中敵方炮彈的煙霧效果保存在emitter.plist文件內,將玩家炮彈的火焰效果保存在emitter2.plist文件內,那麼在遊戲中加載的代碼如下:

複製代碼
 1 void BulletSprite::bulletInit(void)
 2 {
 3     emitter = new cocos2d::CCParticleSystemQuad();
 4     emitter->initWithFile("emitter.plist");
 5     // 爲什麼要加下面這一句,參見屬性介紹第3條
 6     emitter->setEmissionRate(75.0f);
 7     emitter->stopSystem();
 8     addChild(emitter);
 9 
10     emitter2 = new cocos2d::CCParticleSystemQuad();
11     emitter2->initWithFile("emitter2.plist");
12     emitter2->setEmissionRate(350.0f);
13     emitter2->stopSystem();
14     addChild(emitter2);
15 }
複製代碼

好了,今天就說到這裏,也不是想得那麼難,是不是?