引言
Cocos2d-x引擎提供了強大的粒子系統,
它在模仿自然現象、實體現象及空間扭曲上具備得天獨厚的優勢,為我們實作一些真實自然而又帶有随機性的特效(如爆炸、×××、水流)提供了友善。盡管如此,
它衆多的粒子屬性還是着實讓人頭疼。因為如果要想自己編碼寫出炫麗的粒子效果,這裡有太多的屬性需要手動設定和調節。不管是對新手還是資深的老油條程式員
來說,都存在不同程度的不便性。
效果
是以,本文将結合 “天天愛消除” 遊戲場景中的粒子特效,講解如何使用粒子編輯器編輯實作飄飄揚揚往下飛落的的粒子效果。效果如下:
粒子編輯器的使用
現在網絡中普遍使用的是 Particle
Designer編輯器,不過它隻支援在Mac系統下使用。對于像我這樣的窮屌絲來說,怎麼用的起!是以本文将介紹另一個粒子編輯器particle-
editor的使用方法,它的功能同樣強大,而且還支援在windows系統下使用。兩種編輯器的用法大同小異,都可以把編輯出的粒子效果直接導出為
plist檔案。
下載下傳位址
particle-editor的下載下傳位址:
https://code.google.com/p/cocos2d-windows-particle-editor/downloads/detail?name=ParticleEditor%20V2.0.7z&can=2&q=
使用方法
particle-editor編輯器無需安裝,下載下傳解壓後即可使用,它的編輯界面如下:
菜單欄的 Samples 下為使用者提供了一些常用的粒子特效,如×××、火、流星等,你可根據需要建立不同的粒子群。
屬性講解
編輯器的屬性:
1.IsBackgroundMove 編輯器背景圖檔是否滾動,如果你覺得它動來動去的很煩人,你可以把它設定為False
2.IsSaveTextureImageData 是否把圖檔資料編碼到檔案裡導出,這裡我建議把它設定為False
3.Scale 編輯器畫布縮放比例大小
編輯器的屬性隻影響編輯器内的預覽效果,不對儲存的.plist檔案産生影響。而下面的所有屬性都對應Cocos2dx中粒子系統的各屬性,會直接影響生成的.plist檔案。
主要屬性:
1.Duration 發射器生存時間,即它可以發射粒子的時間,注意這個時間和粒子生存時間不同。機關秒,-1表示永遠;粒子發射結束後可點選工具欄的播放按鈕再次發射
2.EmissionRate 每秒噴發的粒子數目
3.IsAutoRemoveOnFinish 粒子結束時是否自動删除
4.Mode 噴發器模式,有重力模式(Gravity)和半徑模式(Radius,也叫放射模式)兩種
5.TotalParticles 場景中存在的最大粒子數目,往往與EmissionRate配合起來使用
半徑模式:半徑模式可以使粒子以圓圈方式旋轉,它也可以創造螺旋效果讓粒子急速前進或後退。下列各屬性隻在半徑模式下起作用。
1.EndRadius 結束半徑
2.EndRadiusVar 結束半徑變化範圍,即結束半徑值的範圍在 (EndRadius – EndRadiusVar) 和 (EndRadius + EndRadiusVar )之間,下面類似。
3.RotatePerSecond 粒子每秒圍繞起始點的旋轉角度
4.RotatePerSecondVar 粒子每秒圍繞起始點的旋轉角度變化範圍
5.StartRadius 初始半徑
6.StartRadius 初始半徑變化範圍
重力模式:顧名思義,重力模式模拟重力,可讓粒子圍繞一個中心點移近或移遠,它的優點是非常動态,而且移動有規則。下列各屬性隻在重力模式下起作用。
1.GravityX 重力X
2.GravityY 重力Y
3.RadiaAccel 粒子徑向加速度,即平行于重力方向的加速度
4.RadiaAccelVar 粒子徑向加速度變化範圍
5.Speed 速度
6.SpeedVar 速度變化範圍
7.TangentialAccel 粒子切向加速度,即垂直于重力方向的加速度
8.TangentialAccelVar 粒子切向加速度變化範圍
生命屬性:
1.Life 粒子生命,即粒子的生存時間
2.LifeVar 粒子生命變化範圍
大小屬性:
1.EndSize 粒子結束時的大小,-1表示和初始大小一緻
2.EndSize 粒子結束大小的變化範圍
3.StartSize 粒子的初始大小
4.StartSize 粒子初始大小的變化範圍
角度屬性:
1.Angle 粒子角度
2.AngleVar 粒子角度變化範圍
顔色屬性:
1.EndColor 粒子結束顔色
2.EndColorVar 粒子結束顔色變化範圍
3.StartColor 粒子初始顔色
4.StartColorVar 粒子初始顔色變化範圍
如果你不想編輯出五顔六色的粒子效果,那應該把EndColorVar,StartColorVar盡量設定為(0, 0, 0, 0)。
位置屬性:
1.PositionType 粒子位置類型,有自由模式(Free)、相對模式(Relative)和打組模式(Grouped)三種
2.PosVarX 發射器位置的橫向變化範圍,×××出現在位置相對中心位置的像素偏移
3.PosVarY 發射器位置的縱向變化範圍
4.SourcePositionX 發射器原始X坐标位置
5.SourcePositionY 發射器原始Y坐标位置
Free自由模式,相對于螢幕自由,不會随粒子節點移動而移動(可産生火焰、蒸汽等效果);Relative相對模式,相對于被綁定的Node靜止,粒子
發射器會随Node移動而移動,可用于制作移動角色身上的特效等等;Grouped打組模式是相對于發射點的,粒子随發射器移動而移動。
自旋屬性:
1.EndSpin 粒子結束自旋角度
2.EndSpinVar 粒子結束自旋角度變化範圍
3.StartSpin 粒子開始自旋角度
4.StartSpinVar 粒子開始自旋角度變化範圍
紋理渲染屬性:
1.DestBlendFunc 目的紋理的混合模式
2.SrcBlendFunc 源紋理的混合模式
3.TextureImageData 紋理資料
4.TexturePath 紋理路徑,目前隻可為Debug.win32目錄下檔案名
Cocos2dx使用OpenGL混合原理對圖形進行渲染繪制。混合就是指把兩種顔色混在一起,具體一點就是把某一像素位置原來的顔色和将要畫上去的顔
色,通過某種方式混在一起,進而實作特殊的效果。它是一種常用的技巧,通常可以用來實作半透明,你也可以通過不同的設定得到不同的混合結果,産生一些有趣
或者奇怪的圖象。
這裡的源紋理和目标紋理跟繪制的順序有關,先繪制的紋理是目标紋理,後繪制的紋理理所應當的就成為了源紋理。下面具體來看看混合模式的屬性值。
DestBlendFunc和SrcBlendFunc的常用值為以下幾種情況:
1.GL_ZERO: 表示使用0.0作為因子,實際上相當于不使用這種顔色參與混合運算。
2.GL_ONE: 表示使用1.0作為因子,實際上相當于完全的使用了這種顔色參與混合運算。
3.GL_SRC_ALPHA:表示使用源顔色的alpha值來作為因子。
4.GL_DST_ALPHA:表示使用目标顔色的alpha值來作為因子。
5.GL_ONE_MINUS_SRC_ALPHA:表示用1.0減去源顔色的alpha值來作為因子。
6.GL_ONE_MINUS_DST_ALPHA:表示用1.0減去目标顔色的alpha值來作為因子。
最常用的組合模式有兩種:GL_ONE和GL_ONE_MINUS_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA和GL_SRC_ALPHA。
介紹完編輯器的各屬性項以後,我們就可以根據需要編輯出不同效果的粒子效果了。下圖是類似天天愛消除遊戲中的“雪花”粒子特效。
資源圖檔
在使用粒子編輯器編輯粒子時,應放在粒子編輯器的ParticleEditor目錄下;導出plist檔案時,應把資源圖檔和plist檔案放一起。你可以點這裡下載下傳該plist
注意:這裡目的紋理的混合模式設定為GL_ONE,源紋理的混合模式設定為GL_ONE_MINUS_SRC_ALPHA。
cocos2dx中加載使用plist檔案
隻要編輯出粒子效果,那在cocos2d-x引擎中加載plist檔案就非常簡單了。使用以下代碼來讀取粒子效果:
<code> </code>
這裡ParticleBatchNode可以引用且隻可以引用1個texture(一個圖檔檔案,一個texture圖集),增加到SpriteBatchNode中的ParticleSystem都是在OpenGL ES調用繪圖函數時繪制的。
如果ParticleSystem沒有增加到ParticleBatchNode中,OpenGL ES會調用每個粒子系統的繪圖函數,這樣做效率會比較低。
好了,基本上就這些,比想象中簡單多了吧。
工程下載下傳位址:https://github.com/renshan/btnTest/tree/master/Test-snow