咱們先了解下類結構吧 緩存
-- CCParticleSystem(全部粒子系統的父類) 工具
-- CCParticleSystemPoint、CCParticleSystemQuad (點粒子和方形粒子系統,都繼承了CCParticleSystem的全部屬性) 性能
-- CCParticleExplosion (爆炸粒子效果) 學習
-- CCParticleFireworks (煙花粒子效果) 測試
-- CCParticleFire (火焰粒子效果) spa
-- CCParticleFlower (花束粒子效果) .net
-- CCParticleGalaxy (星系粒子效果) 對象
-- CCParticleMeteor (流星粒子效果) 繼承
-- CCParticleSpiral (漩渦粒子效果) 教程
-- CCParticleSnow (雪粒子效果)
-- CCParticleSmoke (煙粒子效果)
-- CCParticleSun (太陽粒子效果)
-- CCParticleRain (雨粒子效果)
Ok,基本上也就這麼多東西吧。都是cocos2d自帶的粒子系統,也是蠻強大的。關鍵玩的不是這些類,而是粒子系統的屬性,N多的屬性,想調出漂亮的效果還就靠這些屬性了。暫且先無論那些,後面會講到一個工具(Particle Designer),蠻方便的,省去了很多事。如今咱們先理解些東西。
一、 有關CCParticleSystemPoint 和CCParticleSystemQuad
大部分粒子系統都會繼承這兩個系統之一,那到底去繼承哪個呢?咱們來分析下:
CCParticleSystemPoint 點粒子系統,消耗內存比較少,運行速度比較快,但這只是說在一、2代機器上,3代之後的性能就不咋地了。
CCParticleSystemQuad 方形粒子系統,在3代之後的機器上運行的比較快, 他會消耗更多的內存和CPU。
可謂各有利弊哈!那麼咱們能夠在代碼中根據不一樣的機器來選擇最佳的粒子系統麼?
答案是能夠的。
使用預處理器ARCH_OPTIMAL_PARTICLE_SYSTEM來定義粒子系統,在代碼編譯過程當中來判斷使用哪個粒子系統。會自動的根據機型選擇合適的粒子系統
例:@interface CCParticleExplosion : ARCH_OPTIMAL_PARTICLE_SYSTEM
二、 有關粒子貼圖
粒子貼圖必須小於64x64的,越小越好。
能夠將貼圖嵌入到Particle Designer中(缺點:修改貼圖不方便),也可導入工程中self.texture = [[CCTextureCachesharedTextureCache] addImage:particleFile]。
好了,下一步咱們就來學習下粒子工具 ParticleDesigner,一個可視調屬性工具。下載地址:http://particledesigner.71squared.com.這個工具怎麼來用就不細說了,打開此工具一目瞭然。在此說下在項目中怎麼來用這個工具導出的文件。
一、 點擊工具中SAVE,保存爲.plist格式文件,而後將文件導入到項目中(最基本的就不用說了)。
二、 而後實例化粒子對象 (這裏必須用ARCH_OPTIMAL_PARTICLE_SYSTEM來初始化,若是用父類CCParticleSystem將什麼都看不到)
CCParticleSystem * system;
system = [ARCH_OPTIMAL_PARTICLE_SYSTEM particleWithFile"fx-explosion.plist"];
[self addChild:system z:1 tag:1];
三、 OK接下來能夠修改下在工具中不能修改的屬性
system.positionType = kCCPositionTypeFree;
system.autoRemoveOnFinish = YES;//發射完粒子消失後從父節點移除
system.position = ccp(100, 100);//粒子發射器位置
須要注意一點的是 positionType 這個屬性,翻看Himi 的教程,裏面有個講到粒子會隨精靈的位置變更而變更。這都取決於這個屬性的設定。有三個值:
kCCPositionTypeRelative 相對模式, 粒子發射器會隨精靈移動而移動,可用於製做角色身上特效等等
kCCPositionTypeGrouped 這個和上邊的產生效果同樣(實驗獲得的結果),區別在於這個是粒子隨發射器移動而移動
kCCPositionTypeFree 自由模式, 不會隨粒子節點移動而移動(可產生火焰、蒸汽等效果)
四、 最後咱們再說個在測試中遇到的問題, 當要顯示粒子效果時,在界面上會輕微的卡下,這是粒子在加載貼圖資源。這個問題不解決可能會使遊戲變得不流暢了。在這裏咱們可使用預加載機制,這個方法也是跟教程學的,嘿嘿!學習無處不在嘛!
首先,咱們在遊戲進入的場景的初始化init中加入[self preloadParticleEffect];
- (void)preloadParticleEffect
{
[ARCH_OPTIMAL_PARTICLE_SYSTEM particleWithFile"fx-explosion.plist"];
}
由於particleWithFile方法是以自動釋放的方式初始化的粒子,所以不用關心他們的內存釋放問題。
當他們釋放掉之後他們的貼圖會保留再緩存(CCTextureCache)中,所以解決了粒子顯示時及時加載貼圖的問題。
若是"fx-explosion.plist"裏面沒有嵌貼圖,那就用[[CCTextureCachesharedTextureCache]addImage"fire.png"];這個方式先把貼圖加入緩存啦。
調效果那就須要你們本身用工具調了,貌似不 那麼容易 。。。你們加油吧! 有什麼要補充的提出來哈,你們一塊兒學習嘛 。。。
基本的設置
Max Particles 粒子的數量
Lifespan 生命週期, 週期越長屏幕上同事存在的粒子數量就越多
LifespanVariance 生命週期的變量值,例如生命週期爲5,變量爲1,那麼生命週期就會在5-1和5+1之間隨機一個數
Start Size 開始的粒子大小
Start SizeVariance 開始粒子大小的變量值
Finish Size 結束的粒子大小
Finish SizeVariance 結束粒子大小的變量值
Particle EmitAngle 粒子發射的角度
Particle EmitAngle Variance 粒子發射角度變量值
Position Y 發射的Y座標
Position X 發射的X座標
Duration 持續時間,當爲 -1時候是持久的
發射模式設置
Gracity 重力模式
Speed 粒子速度
Speed Variance 速度變量值
Gracity x 粒子重力下X軸上的加速度
Gravity y 粒子重力下Y軸上的加速度
Radial Acceleration 當是正數時,離發射器越遠,加速就越大;不然相反
Radial Acceleration Variance 以上的浮動值
Tangential Acceleration 讓粒子旋轉圍着發射器運動,越遠加速越快。當爲正時,逆時針旋轉;不然相反
Radial 半徑模式(讓粒子沿着一個圓形旋轉,可產生漩渦、螺旋效果)
Max Radius 最大半徑
Max Radius Variance 以上浮動值
Min Radius 最小半徑
Deg.Per.Second影響粒子移動的方向和速度
Deg.Per.Second Var 以上浮動值
顏色模式(ccColor4F)
Red 紅
Blue 藍
Green 綠
Alpha 透明度
粒子混合模式Blend Function
來源Source和目標Destination這個兩個值都爲如下幾種狀況:
GL_ZERO
GL_ONE
GL_SRC_COLOR
GL_ONE_MINUS_SRC_COLOR
GL_SRC_ALPHA
GL_ONE_MINUS_SRC_ALPHA
GL_DST_ALPHA
GL_ONE_MINUS_DST_ALPHA
好比:
來源混合模式GL_SRC_ALPHA和目標混合模式GL_ONE_MINUS_SRC_ALPHA的話,獲得的 將會是透明的粒子。
來源混合模式GL_SRC_ALPHA和目標混合模式GL_ONE常常配合使用來生成遞增型 的混合效