cocos2d 粒子效果以及Particle Designer粒子工具的學習


最近在學習cocos2d中的粒子效果吧,下面就把學到的和大家分享下吧!

Now!我們先了解下類結構吧

-- CCParticleSystem(所有粒子系統的父類)

-- CCParticleSystemPointCCParticleSystemQuad (點粒子和方形粒子系統,都繼承了CCParticleSystem的所有屬性)

    -- CCParticleExplosion       (爆炸粒子效果)

    -- CCParticleFireworks       (煙花粒子效果)

    -- CCParticleFire               (火焰粒子效果)

    -- CCParticleFlower           (花束粒子效果)

    -- CCParticleGalaxy          (星系粒子效果)

    -- CCParticleMeteor          (流星粒子效果)

    -- CCParticleSpiral           (漩渦粒子效果)

    -- CCParticleSnow            (雪粒子效果)

    -- CCParticleSmoke          (煙粒子效果)

    -- CCParticleSun              (太陽粒子效果)

    -- CCParticleRain             (雨粒子效果)

 

Ok,基本上也就這么多東西吧。都是cocos2d自帶的粒子系統,也是蠻強大的。關鍵玩的不是這些類,而是粒子系統的屬性,N多的屬性,想調出漂亮的效果還就靠這些屬性了。暫且先不管那些,后面會講到一個工具(Particle Designer,蠻方便的,省去了不少事。現在我們先理解些東西。

1、 有關CCParticleSystemPoint CCParticleSystemQuad

大部分粒子系統都會繼承這兩個系統之一,那到底去繼承哪一個呢?我們來分析下:

CCParticleSystemPoint 點粒子系統,消耗內存比較少,運行速度比較快,但這只是說在12代機器上,3代以后的性能就不咋地了。

CCParticleSystemQuad 方形粒子系統,在3代以后的機器上運行的比較快, 他會消耗更多的內存和CPU

可謂各有利弊哈!那么我們可以在代碼中根據不同的機器來選擇最佳的粒子系統么?

答案是可以的。

使用預處理器ARCH_OPTIMAL_PARTICLE_SYSTEM來定義粒子系統,在代碼編譯過程中來判斷使用哪一個粒子系統。會自動的根據機型選擇合適的粒子系統

例:@interface CCParticleExplosion : ARCH_OPTIMAL_PARTICLE_SYSTEM

 

2、 有關粒子貼圖

粒子貼圖必須小於64x64的,越小越好。

     可以將貼圖嵌入到Particle Designer中(缺點:修改貼圖不方便),

                 也可導入工程中self.texture = [[CCTextureCache sharedTextureCache] addImage:particleFile]

 

好了,下一步我們就來學習下粒子工具 Particle Designer,一個可視調屬性工具。下載地址:http://particledesigner.71squared.com. 這個工具怎么來用就不細說了,打開此工具一目了然。在此說下在項目中怎么來用這個工具導出的文件。

 

           這個工具屬性相關介紹我已經整理了一份 http://www.cnblogs.com/xuling/archive/2012/02/16/2354249.html

 

1、 點擊工具中SAVE,保存為.plist格式文件,然后將文件導入到項目中(最基本的就不用說了)。

 

2、 然后實例化粒子對象 (這里必須用ARCH_OPTIMAL_PARTICLE_SYSTEM來初始化,如果用父類CCParticleSystem將什么都看不到

CCParticleSystem * system;

system = [ARCH_OPTIMAL_PARTICLE_SYSTEM particleWithFile:@"fx-explosion.plist"];

[self addChild:system z:1 tag:1];

 

3、 OK接下來可以修改下在工具中不能修改的屬性

                  system.positionType = kCCPositionTypeFree;

                  system.autoRemoveOnFinish = YES;//發射完粒子消失后從父節點移除

                  system.position = ccp(100, 100);//粒子發射器位置

需要注意一點的是 positionType 這個屬性,翻看Himi 的教程,里面有個講到粒子會隨精靈的位置變動而變動。這都取決於這個屬性的設定。有三個值:

kCCPositionTypeRelative 相對模式, 粒子發射器會隨精靈移動而移動,可用於制作角色身上特效等等

kCCPositionTypeGrouped 這個和上邊的產生效果一樣(實驗得到的結果),區別在於這個是粒子隨發射器移動而移動

kCCPositionTypeFree      自由模式, 不會隨粒子節點移動而移動(可產生火焰、蒸汽等效果)

 

4、 最后我們再說個在測試中遇到的問題, 當要顯示粒子效果時,在界面上會輕微的卡下,這是粒子在加載貼圖資源。這個問題不解決可能會使游戲變得不流暢了。在這里我們可以使用預加載機制,這個方法也是跟教程學的,嘿嘿!學習無處不在嘛!

首先,我們在游戲進入的場景的初始化init中加入 [self preloadParticleEffect];

                - (void)preloadParticleEffect

                {

                        [ARCH_OPTIMAL_PARTICLE_SYSTEM particleWithFile:@"fx-explosion.plist"];

               }

                因為particleWithFile方法是以自動釋放的方式初始化的粒子,因此不用關心他們的內存釋放問題。

                當他們釋放掉以后他們的貼圖會保留再緩存(CCTextureCache)中,因此解決了粒子顯示時及時加載貼圖的問題。

                如果"fx-explosion.plist"里面沒有嵌貼圖,那就用[[CCTextureCachesharedTextureCache] addImage:@"fire.png"];這個方式先把貼圖加入緩存啦。

 

             到此為止,算是學完了,亂七八糟的扯了一大堆,有用的也就是后面這段, 這也是為了理解深刻點嘛!哈哈 ,怎么用說完了,調效果那就需要大家自己用工具調了,貌似不 那么容易 。。。大家加油吧! 有什么要補充的提出來哈,大家一起學習嘛, 繼續忙了, 源碼鏈接就放下面了 。。。                      

                                                                                                                                                               ——Juner 's

          /Files/xuling/ParticleDemo.zip

    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM