粒子系统和11种系统自带的粒子特效


粒子系统有两部分组成:粒子粒子发射器
粒子发射器共同属性:
TotalParticles 粒子总数
Duration 发射时间
EmissionRate 发射速率
EmitterMode 发射器模式 Gravity(重力) 和 Radius(半径)
Position 发射器位置
PosVar 发射器位置浮动
PositionType 设置粒子与发射器的相对位置
  三种模式: 自由模式:FREE(粒子不与发射器联系)
    相对模式:RELATIVE(粒子发射器随粒子节点的移动而移动)
      相对模式:GROUPED(粒子群随发射器的移动而移动)
Texture 粒子纹理图片

重力发射器属性:
Gravity: 重力
Speed: 速度
SpeedVar: 速度变化率
RadialAccel: 径向加速度
RadialAccelVar: 径向加速度变化率
TangentialAccel: 切向加速度

TangentialAccelVar: 切向加速度变化率

半径发射器属性:
StartRadius: 起始半径
StartRadiusVar: 起始半径浮动值
EndRadius: 结束半径
EndRadiusVar: 结束半径浮动值
RotatePerSecond: 旋转角速度
RotatePerSecondVar: 旋转角速度变化值

粒子属性:
Life: 生存时间
LifeVar:
StartSize: 起始大小
StartSizeVar:
EndSize: 结束大小
EndSizeVar:
StartColor: 开始颜色
StartColorVar:
EndColor: 结束颜色
EndColorVar:
StartSpin: 起始旋转角度
StartSpinVar:
EndSpin: 结束旋转角度
EndSpinVar:
Angle: 发射角度
AngleVar:

粒子系统的使用:
一. 使用系统自带的效果
auto snow = ParticleSnow::create();
snow->setTexture(Director::getInstance()->getTextureCache()->addImage("snow.png"));
snow->setPosition(Point(200,200));
this->addChild(snow);
系统自带的十一种效果如下:

 1. 雪花特效

ParticleSystem* ps = ParticleSnow::create();
ps->setTexture(Director::getInstance()->getTextureCache()->addImage("snow.png"));
ps->setPosition(Point(200,200));//生成的雪花的起始位置
this->addChild(ps,10);

2. 烟花效果 
ParticleSystem* ps = ParticleFireworks::create();
ps->setTexture(Director::getInstance()->getTextureCache()->addImage("CloseSelected.png"));
ps->setPosition(Point(200,200));
this->addChild(ps,10);

3. 下雨效果 
ParticleSystem* ps = ParticleRain::create();
ps->setTexture(Director::getInstance()->getTextureCache()->addImage("CloseSelected.png"));
ps->setPosition(Point(200,200));
this->addChild(ps,10);
4. 烟雾 
ParticleSystem* ps = ParticleSmoke::create();//效果实在不咋地
ps->setTexture(Director::getInstance()->getTextureCache()->addImage("CloseSelected.png"));
ps->setPosition(Point(200,200));
this->addChild(ps,10);
5、爆炸 
ParticleSystem* ps = ParticleExplosion::create();
ps->setTexture(Director::getInstance()->getTextureCache()->addImage("CloseSelected.png"));
ps->setPosition(Point(200,200));
this->addChild(ps,10);
6、螺旋 
ParticleSystem* ps = ParticleSpiral::create();
ps->setTexture(Director::getInstance()->getTextureCache()->addImage("CloseSelected.png"));
ps->setPosition(Point(200,200));
this->addChild(ps,10);
7、流星(用彗星来描述会更贴切一点,因为它拖着一条长长的尾巴) 
ParticleSystem* ps = ParticleMeteor::create();
ps->setTexture(Director::getInstance()->getTextureCache()->addImage("CloseSelected.png"));
ps->setPosition(Point(200,200));
this->addChild(ps,10);
8、星云 
ParticleSystem* ps = ParticleGalaxy::create();
ps->setTexture(Director::getInstance()->getTextureCache()->addImage("CloseSelected.png"));
ps->setPosition(Point(200,200));
this->addChild(ps,10);
9、太阳 
ParticleSystem* ps = ParticleSun::create();
ps->setTexture(Director::getInstance()->getTextureCache()->addImage("CloseSelected.png"));
ps->setPosition(Point(200,200));
this->addChild(ps,10);
10、火焰 
ParticleSystem* ps = ParticleFire::create();
ps->setTexture(Director::getInstance()->getTextureCache()->addImage("CloseSelected.png"));
ps->setPosition(Point(200,200));
this->addChild(ps,10);

11.花束效果

    ParticleSystem* particleSystem = ParticleFlower::create();  

    particleSystem->setTexture(CCTextureCache::sharedTextureCache()->addImage("fire.png"));  

    addChild(particleSystem); 

 二. 代码自定义粒子系统
    auto m_emitter = new ParticleSystemQuad();
    m_emitter->initWithTotalParticles(900);//900个粒子对象
    m_emitter->setTexture(Director::getInstance()->getTextureCache()->addImage("snow1.png"));
    //设置发射粒子的持续时间-1表示一直发射, 0没有意义, 其他值表示持续时间
    m_emitter->setDuration(-1);
    //设置中心方向, 这个点是相对发射点, x正方向为右, y正方向为上
    m_emitter->setGravity(Point(0, -40));
    //设置角度, 角度的变化率 (Var 是浮动值, 若初始值是5, var是1, 那么会在4~6范围内浮动)
    m_emitter->setAngle(0);
    m_emitter->setAngleVar(360);
    //设置运动速度, 运动速度的变化率
    m_emitter->setSpeed(50);
    m_emitter->setSpeedVar(10);
    //设置径向加速度, 径向加速度的变化率
    m_emitter->setRadialAccel(50);
    m_emitter->setRadialAccelVar(0);
    //设置粒子的切向加速度, 切向加速度的变化率
    m_emitter->setTangentialAccel(30);
    m_emitter->setTangentialAccelVar(0);
    

    //设置粒子的初始位置, 位置的变化率
    m_emitter->setPosition(visibleSize.width, visibleSize.height);
    m_emitter->setPosVar(Point(visibleSize.width, 0));
    //设置粒子生命, 生命的变化率
    m_emitter->setLife(4);
    m_emitter->setLifeVar(2);
    //设置粒子开始的自旋转速度, 开始自旋转速度的变化率
    m_emitter->setStartSpin(90);
    m_emitter->setStartSpinVar(120);
    //设置结束的时候的自旋转以及自旋转的变化率
    m_emitter->setEndSpin(90);
    m_emitter->setEndSpinVar(160);
    Color4F cc;
    cc.a = 1.0f;
    cc.b = 255.0f;
    cc.g = 255.0f;
    cc.r = 255.0f;
    Color4F cc2;
    cc2.a = 0;
    cc2.b = 0;
    cc2.g = 0;
    cc2.r = 0;
    //设置开始的时候的颜色以及颜色的变化率
    m_emitter ->setStartColor(cc);
    m_emitter->setStartColorVar(cc2);
    //设置结束的时候的颜色以及颜色的变化率
    m_emitter->setEndColor(cc);
    m_emitter->setEndColorVar(cc2);
    //设置开始时候粒子的大小, 以及大小的变化率
    m_emitter->setStartSize(30);
    m_emitter->setStartSizeVar(0);
    //设置粒子结束时候的大小, 以及大小的变化率
    m_emitter->setEndSize(20.0f);
    m_emitter->setEndSizeVar(0);
    //设置每秒产生粒子数
    m_emitter->setEmissionRate(100);
    addChild(m_emitter);

三. 使用plist文件

    auto crash = ParticleSystemQuad::create("explode.plist");
    crash->setDuration(-1);
    crash->setPosition(Point(300, 200));
    this->addChild(crash);
 
 
原文地址:https://www.cnblogs.com/lion-witcher/p/6021845.html