cocos2d-x的粒子系统

一、认识粒子

粒子效果有两种部分组成:粒子和发射器

发射器:每次只能发射一个粒子,但没有时间限制,可能每秒成百上千的粒子被发射出来

粒子生命周期:出生—>成长—>死亡,从发射器发射粒子(出生)后粒子每一帧都在刷新自己(成长),粒子死亡后并不会消失而是被收到一个存放粒子的地方(粒子池),等待被激活再次使用

粒子属性:粒子有初始值和结束值,初始值和结束值都是由实际值得到的,实际值是由原始值(startRadius)加上浮动值(startRadiusVar)得到的

例如:原始值是5

           浮动值是2

           实际值就是3到7之间的值

发射器属性:共有属性:

属性函数说明
最大粒子个数TotalParticles

规定了粒子池中最大的粒子个数。

当粒子池中没有待激活的粒子时,即粒子已全部发射出去,均未死亡,发射器将不在发射新粒子。

直到粒子死亡重新回到粒子池后,才继续发射。

持续时间Duration

单位:秒

发射器发射粒子持续的时间。如2.0f,那么发射器在2.0秒内持续发射粒子。

设置永久发射:-1

发射速率EmissionRate

单位:个数/秒

发射器每秒发射的粒子个数.

一般设置为:最大粒子个数  /  粒子生存时

发射器模式EmitterMode

设置发射器模式:

重力发射器:kCCParticleModeGravity

半径发射器:kCCParticleModeRadius

发射器位置Position

单位:CCPoint(x,y)

这是发射器的位置,根据它来确定粒子产生的位置。

重力发射器就是粒子的位置。

半径发射器类似圆心位置。

PosVar(发射器位置浮动值)
粒子位置模式PositionType

设置粒子与发射器的相对位置

自由模式:kCCPositionTypeFree

                   粒子不与发射器联系,

                   发射后粒子走自己分轨道,可以做

                   出焰尾。

相对模式: kCCPositionTypeRelative

                   粒子发射器随粒子节点的移动而移动

相对模式: kCCPositionTypeGrouped

                   粒子群随发射器移动而移动。          

纹理图片Texture用于粒子的纹理贴图

重力发射器属性:kCCParticleModeGravity

属性函数说明
粒子速度Speed

单位:float

粒子发射后,移动的初速度,是一个矢量值。

SpeedVar(粒子速度浮动值)
重力速度Gravity

单位:CCPoint(ax,ay)

基于OpenGL坐标下,即左下角为坐标原点。

X轴方向加速:正值向右。

Y轴方向加速:正值向左。

是一个矢量值。

径向速度RadialAccel

单位:float

速度方向上的加速度。

移动过程中,径向加速度始终与速度方向平行。

正值,同向

负值,反向

RadialAccelVar(径向加速度浮动值)
切向加速度TangentialAccel

单位:fioat

与速度方向垂直方向的加速度,移动过程中,切向加速度始终与速度方向垂直。

正值,逆时针·

负值,顺时针

TangentialAccelVar(切向加速度浮动值)

半径发射器属性:kCCParticleModeRadius

属性函数说明
起始半径StartRadius

单位:float

粒子出生时,与发射器位置的距离

StartRadiusVar(起始半径浮动值)
结束半径EndRadius

单位:float

粒子死亡时,与发射器位置的距离

EndRadius(结束半径浮动值)
旋转角速度RotatePerSecond

单位:角度/秒

粒子绕发射器位置旋转的角速度

RotatePerSecondVar(旋转角速度浮动值)

二、内置粒子效果

bool MyParticle::init()
{
	if (!Layer::init())
	{
		return false;
	}

    //下雪
    ParticleSnow* pParticleSnow = ParticleSnow::create();
    addChild(pParticleSnow);
    pParticleSnow->setPosition(visibleSize_.width / 2, visibleSize_.height);
    //下雨
    ParticleRain* pParticleRain = ParticleRain::create();
    addChild(pParticleRain);
    pParticleRain->setPosition(visibleSize_.width / 2, visibleSize_.height);
    //烟花
    ParticleFireworks* pParticleFireworks = ParticleFireworks::create();
    addChild(pParticleFireworks);
    pParticleFireworks->setPosition(visibleSize_.width / 2, 100);
    //火焰
    ParticleFire* pParticleFire = ParticleFire::create();
    addChild(pParticleFire);
    pParticleFire->setPosition(100, 100);
    //烟雾
    ParticleSmoke* pParticleSmoke = ParticleSmoke::create();
    addChild(pParticleSmoke);
    pParticleSmoke->setPosition(400,100);
    //彗星
    ParticleMeteor* pParticleMeteor = ParticleMeteor::create();
    addChild(pParticleMeteor);
    pParticleMeteor->setPosition(visibleSize_.width / 2, 550);
    //爆炸
    ParticleExplosion* pParticleExplosion = ParticleExplosion::create();
    addChild(pParticleExplosion);
    pParticleExplosion->setPosition(visibleSize_ / 2);
    //太阳
    ParticleSun* pParticleSun = ParticleSun::create();
    addChild(pParticleSun);
    pParticleSun->setPosition(400, 700);
    //星云
    ParticleGalaxy* pParticleGalaxy = ParticleGalaxy::create();
    addChild(pParticleGalaxy);
    pParticleGalaxy->setPosition(visibleSize_.width / 2, 700);
    //螺旋
    ParticleSpiral* pParticleSpiral = ParticleSpiral::create();
    addChild(pParticleSpiral);
    pParticleSpiral->setPosition(visibleSize_ / 2);
    //花球
    ParticleFlower* pParticleFlower = ParticleFlower::create();
    addChild(pParticleFlower);
    pParticleFlower->setPosition(100, 700);

	return true;
}

三、自定义粒子效果   ParticleSystemQuad

1、写代码实现


    ParticleSystemQuad* pPar_Custom=   ParticleSystemQuad::createWithTotalParticles(2000);          
    addChild(pPar_Custom);
    pPar_Custom->setPosition(visibleSize_ / 2);
    pPar_Custom->纹理,持续时间,重力方向,角度,加速度,生命值等等,都要设置好

2、文件实现

    ParticleSystemQuad* pPar_Custom = ParticleSystemQuad::create("文件路径");
    addChild(pPar_Custom);
    pPar_Custom->setPosition(visibleSize_ / 2);

                   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

坚持使我强大

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值