似乎是沒得選,目前在windows上就發現了一款粒子編輯器,叫做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 }
好了,今天就說到這里,也不是想得那么難,是不是?