1. 程式人生 > >Cocos2d-x 粒子系統詳解

Cocos2d-x 粒子系統詳解

              

cocos2dx已經為我們提供了非常多的粒子系統效果:

                      1、 CCParticleExplosion爆炸
                      2、 CCParticleFire 火
                      3、CCParticleFireworks煙火
                      4、CCParticleFlower花
                      5、CCParticleGalaxy 銀河
                      6、CCParticleMeteor 流星
                      7、CCParticleRain 下雨
                      8、CCParticleSmoke 下雪
                      9、CCParticleSnow 炊煙
                      10、CCParticleSpiral 螺旋
                      11、CCParticleSun 太陽焰

自定義一個CCParticleSystem粒子系統
  CCParticleSystem* ignore = CCParticleSystemQuad::create("Particles/SmallSun.plist");
  //第一種建立節點方式
  CCNode *parent1 = CCNode::create();//建立一個節點
  //第二種建立節點方式
  CCNode *parent2 = CCParticleBatchNode::create(ignore->getTexture());

  第一種:建立一個CCParticleSystemQuad系統:每個粒子用4個點(Quad,矩形)表示的粒子系統

  CCParticleSystemQuad *emitter = CCParticleSystemQuad::create("SmallSun.plist");//SmallSun.plist為用粒子系統編輯工具生成的檔案

  第二種:建立CCParticleSystemQuad系統

  CCParticleSystemQuad * m_emitter = new CCParticleSystemQuad();

  std::string filename = "Particles/" +“粒子資原始檔名字”+ ".plist";
  m_emitter->initWithFile(filename.c_str());

常用設定:
  emitter1->setStartColor(ccc4f(1,0,0,1));//設定粒子RGBA值
  emitter1->setBlendAdditive(false);//是否新增混合
  emitter1->setPosition(ccp( s.width/2-30,    s.height/2+60*neg));//設定發射粒子的位置
  emitter->setAutoRemoveOnFinish(true);//完成後制動移除

  parent1->addChild(emitter1, 0, 1);將粒子系統新增到節點(也可以直接將其新增到一個背景精靈CCSprite裡面)
  layer->addChild(parent1, 10, 1000+i);然後在新增到層裡面

CCParticleSystem中的常用設定引數表:

         //重力和方向的向量
        CCPoint gravity;
        //速度
        float speed;
        //粒子的速度差異
        float speedVar;
        //粒子的切線加速度
        float tangentialAccel;
        //粒子間的切線加速度差異
        float tangentialAccelVar;
        //粒子的徑向加速度
        float radialAccel;
        //粒子間的徑向加速度差異
        float radialAccelVar;

        //粒子開始半徑
        float startRadius;
        //粒子間開始半徑差異
        float startRadiusVar;

        //粒子結束半徑
        float endRadius;
        //粒子間結束半徑差異
        float endRadiusVar;            
        //粒子每秒的旋轉角度
        float rotatePerSecond;
        //粒子間每秒的旋轉角度差異        

        float rotatePerSecondVar;