首先需要明白粒子系统的原理,在引擎中存在一个粒子池,存放了待激活的粒子。发射器每次从粒子池中获取一个粒子,然后计算赋予粒子初始的属性(速度、大小、方向、生存时间等)后,将粒子发射出去。粒子被发射出去后,会不断地刷新来修正它的属性。当粒子的生存时间结束后,粒子就会死亡,然后重新被粒子池回收,等待下一次的激活。以下演示在3.0版本后使用三种方法来创建粒子效果。

// 1、使用Cocos2d-x提供的效果
    auto snow = ParticleSnow::create();
    //设置粒子效果使用的纹理
    snow->setTexture(Director::getInstance()->getTextureCache()->addImage("snow.png"));
    snow->setPosition(Point(0,400));
    this->addChild(snow);
    
    auto rain = ParticleRain::create();
    rain->setTexture(Director::getInstance()->getTextureCache()->addImage("fire.png"));
    rain->setPosition(Point(400,200));
    this->addChild(rain);
//2、代码自定义
    auto emitter = ParticleSystemQuad::createWithTotalParticles(50);
    //emitter是一个粒子发射器
    emitter->setTexture(Director::getInstance()->getTextureCache()->addImage("fire.png"));
    //设置不断发射粒子
    emitter->setDuration(-1);
    emitter->setPosition(Point(400,400));
    
    //浮动值Var:表示随机上下浮动的修正值。实际值 = 原始值 + 浮动值Var。
    //如:原始值为5,浮动值Var为2。那么实际值取值范围:3~7。
    
    //设置位置的时候x方向的变化率为100
//    emitter->setPosVar(Point(100,0));

    //设置发射的模式 GRAVITY重力模式 RADIUS半径模式
    emitter->setEmitterMode(ParticleSystem::Mode::GRAVITY);
    
    
    //以下属性在半径模式下使用
    
    //开始和结束半径
//    emitter->setStartRadius(-90);
//    emitter->setStartRadiusVar(0);
//    emitter->setEndRadius(90);
//    emitter->setEndRadiusVar(0);
    //粒子饶原点每秒旋转的度数
//    emitter->setRotatePerSecond(90);
//    emitter->setRotatePerSecondVar(0);
    
    
    //以下属性在重力模式下使用
    
    //设置重力加速度
    emitter->setGravity(Point(0,0));
    //设置径向加速度,也就是速度方向的加速度 正值和速度同向 负值和速度相反
    emitter->setRadialAccel(-400);
    emitter->setRadialAccelVar(0);
    //设置切向加速度,也就是垂直速度的方向 正值逆时针 负值顺时针
//    emitter->setTangentialAccel(-30);
//    emitter->setTangentialAccelVar(0);
    //设置发射方向
    emitter->setAngle(-90);
    //速度 沿着发射的方向
    emitter->setSpeed(100);
    

//    emitter->setSpeedVar(20);

    
    //设置生存周期
    emitter->setLife(10);
    emitter->setLifeVar(0);
    
    //设置粒子颜色
    Color4F startColor(0.5f, 0.5f, 0.5f, 1.0f);
    emitter->setStartColor(startColor);
    Color4F startColorVar(0.5f, 0.5f, 0.5f, 1.0f);
    emitter->setStartColorVar(startColorVar);
    Color4F endColor(0.1f, 0.1f, 0.1f, 0.2f);
    emitter->setEndColor(endColor);
    Color4F endColorVar(0.1f, 0.1f, 0.1f, 0.2f);
    emitter->setEndColorVar(endColorVar);
    
    //设置粒子大小
    emitter->setStartSize(200);
    emitter->setStartSizeVar(0);
    emitter->setEndSize(ParticleSystem::START_SIZE_EQUAL_TO_END_SIZE);

    //发射速率
    emitter->setEmissionRate(emitter->getTotalParticles() /emitter->getLife());
    
    this->addChild(emitter);

Cocos2d-x-3.0粒子系统 Cocos2d-x-3.0粒子系统

//3、使用plist文件
    auto crash = ParticleSystemQuad::create("explode.plist");
    crash->setDuration(-1);
    crash->setPosition(Point(800,500));
    this->addChild(crash);

如果使用代码自定义一个粒子系统可以看到非常的麻烦,我们使用代码是为了了解各个参数的作用,实际使用的时候使用粒子编辑器来做各种效果,然后使用导出的plist文件在程序中使用,Mac下推荐使用Particle Designer,我已经上传到了博客的网盘上,大家可以到分享主页下载。