cocos2d-x CCParticleSystem粒子系統


粒子系統主要分為如下兩種模式:


         1.重力式粒子系統(CCParticleSystemPoint  ): 這種粒子存在重力,好像地球的萬有引力一樣,所有的粒子都會收到重力的約束,當然重力的大小是可以自己定義的
 
         2.放射性粒子系統(CCParticleSystemQuad):: 這種粒子不存在重力,因此粒子好像都在空中,不再收到地球萬有引力的作用
 
@1——根據 plist 文件創建粒子系統:
 
CCParticleSystemQuad *emitter1 = CCParticleSystemQuad::create("Particle/BurstPipe.plist"); 
emitter1->setPosition(ccp( size.width/2,    size.height/2));    // 設置發射粒子的位置 
emitter1->setAutoRemoveOnFinish(true);                          // 完成后制動移除 
emitter1->setDuration(10);                                    // 設置粒子系統的持續時間秒 
this->addChild(emitter1, 0, 1); 
 
 
@2——不使用plist 文件創建粒子系統
重力式粒子系統/CCParticleSystemPoint  使用代碼如下:
       
創建一個Point 粒子系統 
 
        CCParticleSystemPoint *m_emitter = new CCParticleSystemPoint(); 
 
產生300個粒子對象 
     
        m_emitter->initWithTotalParticles(300); 
 
設置粒子對象以及粒子系統的相關參數 
 
設置粒子的圖像,粒子雖小但是還需要有自己的圖像,如果沒有texture 屬性引擎會默認一個圖像 

        m_emitter->setTexture( CCTextureCache::sharedTextureCache("test.png"));  // CCTextureCache::sharedTextureCache()->addImage("a.png"));    
 
1、設置粒子系統的持續時間 
     
        m_emitter->setDuration(-1); 
 
2、設置重力方向 
 
        m_emitter->setGravity(CCPointZero); 
 
3、設置角度,角度變化率 
 
        m_emitter->setAngle(0); 
        m_emitter->setAngleVar(360); 
     
4、設置徑向加速度,徑向加速度變化率 
          
        m_emitter->setRadialAccel(70); 
        m_emitter->setRadialAccelVar(10); 
     
5、設置切向加速度,切向加速度變化率 
 
        m_emitter->setTangentialAccel(80); 
        m_emitter->setTangentialAccelVar(0); 
 
6、設置運動速度,運動速度變化率 
 
        m_emitter->setSpeed(50); 
        m_emitter->setSpeedVar(10); 
     
7、設置粒子位置,粒子位置變化率 
              
        m_emitter->setPosition(CCPointMake(s.width/2,s.height/2)); 
        m_emitter->setPosVar(CCPointzero); 
     
8、設置粒子存在時間,存在時間變化率     
 
        m_emitter->setLife(2.0f); 
        m_emitter->setLifeVar(0.3f); 
     
9、設置粒子開始時候顏色,粒子開始時顏色變化率     
     
        m_emitter->setStartColor({0.5f,0.5f,0.5f,0.5f});       // emitter1->setStartColor(ccc4f(1,0,0,1));//設置粒子RGBA值 
          m_emitter->setStartColorVar({0.5f,0.5f,0.5f,1.0f}); 
 
10、設置粒子結束時候顏色,粒子結束時顏色變化率 
      
        m_emitter->setEndColor({0.1f,0.1f,0.1f,0.2f});     
        m_emitter->setEndColorVar({0.1f,0.1f,0.1f,0.2f}); 
 
11、設置粒子開始時候大小,粒子開始時大小變化率 
          
        m_emitter->setStartSize(1.0f); 
        m_emitter->setStartSizeVar(1.0f);  
               
12、設置粒子結束時候大小,粒子結束時大小變化率 
      
        m_emitter->setEndSize(32.0f); 
        m_emitter->setEndSizeVar(8.0f); 
     
13、設置每秒產生的粒子數 
 
        m_emitter->setEmissionRate(m_emitter->getTotalParticles()/m_emitter->getLife());  // 每秒產生粒子數 =  粒子總數/存活時間 ; 
 
將這個粒子系統設置到背景層上: 
        
        m_background->addChild(m_emitter,1); 
 
 
2.2【放射性粒子系統/CCParticleSystemQuad】
     
    2.2.1】 創建一個Quad粒子系統 
     
        CCParticleSystemQuad *m_emtter = new CCParticleSystemQuad(); 
     
    2.2.2】 產生300個粒子對象 
     
        m_emitter->initWithTotalParticles(300); 
        
     2.2.3】設置粒子對象以及粒子系統的相關參數 
          
        1 2 3 4 5 6 7 8 9 10 11 12 13 和重力式粒子系統一樣唯一不同的就是參數 
     
        下面增加發射型粒子系統特有的屬性 
     
    14、設置粒子開始時候自旋轉的速度,以及變化率: 
     
        m_emitter->setStartSpin(0); 
        m_emitter->setStartSpinVar(0); 
     
    15、設置粒子結束時候自旋轉的速度,以及變化率: 
     
        m_emitter->setEndSpin(0); 
        m_emitter->setEndSpinVar(2000); 
     
    2.2.4】將 m_emitter 設置到 m_background這個層(Layer)上面 
     
        m_background->addChild(m_emitter,1); 
 
 
重力vs半徑模式
 
重力模式能夠讓粒子飛向或者遠離一個中心點。這種的優勢是它允許一個動態的,組織的效果。你可以用如下代碼設置重力模式:
重力模式
    1.    m_emitter->setEmitterMode(kCCParticleModeGravity); 
    2.    m_emitter->setGravity(CCPointZero); 
 
 
   在重力模式中,以下屬性是合法的:
   gravity (Point)。粒子系統的重力。
   speed (float)。粒子們射出的速度。
   speedVar(float)速度變量
   tangencialAccel(float)粒子們的正切加速度
   tangencialAccelVar(float)粒子們正切加速度的變量
   radialAccel(float)粒子們的半徑加速度。
   radialAccelVar(float)粒子們半徑加速度的變量
半徑模式
半徑模式能夠讓粒子在圓中旋轉。也可以創造螺旋模式能讓粒子向屏幕里屏幕外飛。你可以設置半徑模式用下面的幾行代碼:
 
    1.    m_emitter->setEmitterMode(kCCParticleModeRadius); 
    2.    // 設置開始半徑和結束半徑 
    3.    m_emitter->setStartRadius(100);   
    4.    m_emitter->setStartRadiusVar(0);   
    5.    m_emitter->setEndRadius(kCCParticleStartRadiusEqualToEndRadius);    
    6.    m_emitter->setEndRadiusVar(0); 
 
   半徑模式有下列合法的屬性:
   

startRadius (a float).粒子的開始半徑
 
startRadiusVar (a float). 開始半徑變量
   

endRadius (a float). 粒子的結束半徑
   

endRadiusVar (a float).結束半徑變量
   

rotatePerSecond (a float).圍繞一個來源點的每秒旋轉角度
   

rotatePerSecondVar (a float).每秒旋轉角度變量


系統通用屬性:
emissionRate duration (a float):每秒有多少粒子被發射
duration (a float):粒子系統生存時間
blendFunc (a ccBlendFunc):用於系統渲染的OpenGL的渲染函數
positionType (a tCCPositionType).:使用kCCPositionTypeFree (默認值)屬性可以自由的移動粒子們。或者使用kCCPositionTypeGrouped 讓粒子們一組一組的移動。
texture (a CCTexture2D).粒子的紋理
 
 
cocos2dx已經為我們提供了非常多的粒子系統效果:
 
-- CCParticleSystem(所有粒子系統的父類)


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


-- CCParticleExplosion  :爆炸粒子效果


-- CCParticleFireworks  :煙花粒子效果


-- CCParticleFire             :火焰粒子效果


-- CCParticleFlower       :花束粒子效果


-- CCParticleGalaxy        :星系粒子效果


-- CCParticleMeteor       :流星粒子效果


-- CCParticleSpiral         :漩渦粒子效果


-- CCParticleSnow         :雪粒子效果)


-- CCParticleSmoke      :煙粒子效果


-- CCParticleSun            :太陽粒子效果


-- CCParticleRain          :雨粒子效果


免責聲明!

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



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