zoukankan      html  css  js  c++  java
  • 粒子系统主

    粒子系统主要分为如下两种模式:


             1.重力式粒子系统(CCParticleSystemPoint  ): 这种粒子存在重力,好像地球的万有引力一样,所有的粒子都会收到重力的约束,当然重力的大小是可以自己定义的

             2.放射性粒子系统(CCParticleSystemQuad):: 这种粒子不存在重力,因此粒子好像都在空中,不再收到地球万有引力的作用

    @1——根据 plist 文件创建粒子系统:

    1. CCParticleSystemQuad *emitter1 = CCParticleSystemQuad::create("Particle/BurstPipe.plist");  
    2.   
    3.        emitter1->setPosition(ccp( size.width/2,    size.height/2));    // 设置发射粒子的位置  
    4.   
    5. emitter1->setAutoRemoveOnFinish(true);                          // 完成后制动移除  
    6.   
    7. emitter1->setDuration(10);                                      // 设置粒子系统的持续时间秒  
    8.   
    9. this->addChild(emitter1, 0, 1);  

    @2——不使用plist 文件创建粒子系统

     2.1重力式粒子系统/CCParticleSystemPoint  使用代码如下:

            

    1. 2.1.1】 创建一个Point 粒子系统  
    2.   
    3.               CCParticleSystemPoint *m_emitter = new CCParticleSystemPoint();  
    4.   
    5.  2.1.2】 产生300个粒子对象  
    6.   
    7.               m_emitter->initWithTotalParticles(300);  
    8.   
    9.  2.1.3】设置粒子对象以及粒子系统的相关参数  
    10.   
    11.                   //0. 设置粒子的图像,粒子虽小但是还需要有自己的图像,如果没有texture 属性引擎会默认一个图像  
    12.   
    13.          m_emitter->setTexture( CCTextureCache::sharedTextureCache("test.png"));  // CCTextureCache::sharedTextureCache()->addImage("a.png"));     
    14.   
    15.        //1.设置粒子系统的持续时间  
    16.   
    17.           m_emitter->setDuration(-1);  
    18.   
    19.       //2.设置重力方向  
    20.   
    21.           m_emitter->setGravity(CCPointZero);  
    22.   
    23.        //3.设置角度,角度变化率  
    24.   
    25.           m_emitter->setAngle(0);  
    26.           m_emitter->setAngleVar(360);  
    27.   
    28.        //4.设置径向加速度,径向加速度变化率  
    29.            
    30.           m_emitter->setRadialAccel(70);  
    31.           m_emitter->setRadialAccelVar(10);  
    32.   
    33.        //5.设置切向加速度,切向加速度变化率  
    34.   
    35.           m_emitter->setTangentialAccel(80);  
    36.           m_emitter->setTangentialAccelVar(0);  
    37.   
    38.        //6.设置运动速度,运动速度变化率  
    39.   
    40.           m_emitter->setSpeed(50);  
    41.           m_emitter->setSpeedVar(10);  
    42.   
    43.        //7.设置粒子位置,粒子位置变化率  
    44.            
    45.           m_emitter->setPosition(CCPointMake(s.width/2,s.height/2));  
    46.           m_emitter->setPosVar(CCPointzero);  
    47.   
    48.         //8.设置粒子存在时间,存在时间变化率      
    49.   
    50.           m_emitter->setLife(2.0f);  
    51.           m_emitter->setLifeVar(0.3f);  
    52.   
    53.         //9.设置粒子开始时候颜色,粒子开始时颜色变化率      
    54.   
    55.           m_emitter->setStartColor({0.5f,0.5f,0.5f,0.5f});       // emitter1->setStartColor(ccc4f(1,0,0,1));//设置粒子RGBA值  
    56.   
    57.           m_emitter->setStartColorVar({0.5f,0.5f,0.5f,1.0f});  
    58.   
    59.         //10.设置粒子结束时候颜色,粒子结束时颜色变化率  
    60.        
    61.           m_emitter->setEndColor({0.1f,0.1f,0.1f,0.2f});      
    62.           m_emitter->setEndColorVar({0.1f,0.1f,0.1f,0.2f});  
    63.   
    64.         //11.设置粒子开始时候大小,粒子开始时大小变化率  
    65.        
    66.           m_emitter->setStartSize(1.0f);  
    67.           m_emitter->setStartSizeVar(1.0f);   
    68.             
    69.         //12.设置粒子结束时候大小,粒子结束时大小变化率  
    70.        
    71.           m_emitter->setEndSize(32.0f);  
    72.           m_emitter->setEndSizeVar(8.0f);  
    73.   
    74.         //13.设置每秒产生的粒子数  
    75.   
    76.          m_emitter->setEmissionRate(m_emitter->getTotalParticles()/m_emitter->getLife());  // 每秒产生粒子数 =  粒子总数/存活时间 ;  
    77.   
    78.    2.1.4】 将这个粒子系统设置到背景层上:  
    79.      
    80.            m_background->addChild(m_emitter,1);  

    2.2【放射性粒子系统/CCParticleSystemQuad】

          

    1. 2.2.1】 创建一个Quad粒子系统  
    2.   
    3.             CCParticleSystemQuad *m_emtter = new CCParticleSystemQuad();  
    4.   
    5.     2.2.2】 产生300个粒子对象  
    6.   
    7.              m_emitter->initWithTotalParticles(300);  
    8.      
    9.            2.2.3】设置粒子对象以及粒子系统的相关参数  
    10.        
    11.                 1 2 3 4 5 6 7 8 9 10 11 12 13 和重力式粒子系统一样唯一不同的就是参数  
    12.   
    13.      下面增加发射型粒子系统特有的属性  
    14.   
    15.      //14. 设置粒子开始时候自旋转的速度,以及变化率:  
    16.   
    17.                    m_emitter->setStartSpin(0);  
    18.         m_emitter->setStartSpinVar(0);  
    19.   
    20.      //15. 设置粒子结束时候自旋转的速度,以及变化率:  
    21.   
    22.                    m_emitter->setEndSpin(0);  
    23.         m_emitter->setEndSpinVar(2000);  
    24.   
    25.    2.2.4】将 m_emitter 设置到 m_background这个层(Layer)上面  
    26.   
    27.           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).每秒旋转角度变量

    粒子们的常规属性:

    startSize:粒子的初始尺寸(像素值)
    startSizeVar
    endSize:粒子的结束尺寸(如果你想让粒子的开始大小同结束大笑相同,就用一下kCCParticleStartSizeEqualToEndSize
    endSizeVar
    startColor :粒子开始颜色(ccColor4F)
    startColorVar
    endColor :粒子结束颜色
    endColorVar
    startSpin:仅用在CCParticleSystemQuad中,起始螺旋度
    startSpinVar
    endSpin:仅用在CCParticleSystemQuad中,结束螺旋度
    endSpinVar
    life粒子的生命生存时间,单位是秒
    lifeVar
    angle:粒子开始角度,float
    angleVar
    positon:CCPoint粒子位置
    positonVar
    centerOfGravity :CGPoint

    系统通用属性:

    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          :雨粒子效果

        

  • 相关阅读:
    PAT 甲题 1155 Heap Paths
    PAT甲题 1014 Waiting in Line
    PAT甲题 1014 Waiting in Line
    AcWing 840. 模拟散列表
    2019新生赛 %%%xxh
    AcWing 240. 食物链
    AcWing 143. 最大异或对
    AcWing 838. 堆排序
    AcWing 836. 合并集合
    AcWing 837. 连通块中点的数量
  • 原文地址:https://www.cnblogs.com/ADaii/p/3834101.html
Copyright © 2011-2022 走看看