现在的位置: 首页 > 综合 > 正文

cocos2d-x粒子系统

2018年04月02日 ⁄ 综合 ⁄ 共 2738字 ⁄ 字号 评论关闭

粒子系统若是用opengl模拟是比较复杂的,幸好cocos2d给我们提供了很方便使用的粒子系统。粒子系统中需要包括四个部分:粒子对象,运动规律,随机性,粒子状态。大量的粒子叠加就可以产生我们需要的特效。 cocos2d-x引擎中,粒子系统使用CCParticleSystem来表示,又分为两大类,重力式粒子系统CCParticleSystemPoint和放射式粒子系统CCParticleSystemQuad,两者在功能上略有不同,CCParticleSystemQuad支持围绕轴线旋转,CCParticleSystemQuad支持更多粒子对象和缩放,重力式故名思义,系统中存在重力,重力大小可以自己定义,包括的参数有:重心,速度,方向,尺寸,存在时间,颜色,绕自己轴心旋转角度,角加速度,线加速度,半径,分组模式(是否随重心移动),放射性系统恰恰相反,不存在重力,包括的参数有:重心,方向,尺寸,存在时间,颜色,绕自己轴心旋转角度,绕重心为轴心旋转角度,半径,分组模式(是否随重心移动)。

基本使用方法类似

方式一:(使用载入制作好的资源)

可以使用粒子编辑工具比如开源的:ParticleEditorwindows


CCParticleSystemQuad *emitter1 = CCParticleSystemQuad::create("ExplodingRing.plist"); // samples里面的

emitter1->setStartColor(ccc4f(1,0,0,1));

emitter1->setBlendAdditive(false);

emitter1->setPosition(ccp(size.width/2, size.height/2));

addChild(emitter1);

(爆炸环)

方式二:(使用#include <CCParticleExamples.h>的类)


CCParticleFire          CCParticleFireworks      CCParticleSun  

CCParticleGalaxy     CCParticleFlower            CCParticleMeteor 

CCParticleSpiral      CCParticleExplosion      CCParticleSmoke

 CCParticleSnow      CCParticleRain


CCParticleFire *fire = CCParticleFire::create();

fire->setPosition(ccp(size.width/2, size.height/2));

// fire->setTextureWithRect(CCTextureCache::sharedTextureCache()->addImage("fire.png"),

// CCRectMake(0,0,32,32));

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

addChild(fire);

方式三:自定义(下面为一个下雪场景)

(下面代码来自:http://blog.csdn.net/zhy_cheng/article/details/8289683

CCParticleSystemQuad *m_emitter=new CCParticleSystemQuad();

m_emitter->initWithTotalParticles(900);//300个粒子对象

//设置图片

m_emitter->setTexture(CCTextureCache::sharedTextureCache()->addImage("raining.png"));

//设置发射粒子的持续时间-1表示一直发射,0没有意义,其他值表示持续时间

m_emitter->setDuration(-1);

//设置中心方向,这个店是相对发射点,x正方向为右,y正方向为上

m_emitter->setGravity(CCPoint(0,-240));

//设置角度,角度的变化率

  m_emitter->setAngle(90);

  m_emitter->setAngleVar(360);

//设置径向加速度,径向加速度的变化率

  m_emitter->setRadialAccel(50);

  m_emitter->setRadialAccelVar(0);

//设置粒子的切向加速度,切向加速度的变化率

  m_emitter->setTangentialAccel(30);

  m_emitter->setTangentialAccelVar(0);

//设置粒子的位置,位置的变化率

m_emitter->setPosition(CCPoint(size.width/2, size.height/2));

m_emitter->setPosVar(CCPoint(400,0));

//设置粒子声明,生命的变化率

m_emitter->setLife(4);

m_emitter->setLifeVar(2);

//设置粒子开始的自旋转速度,开始自旋转速度的变化率

m_emitter->setStartSpin(30);

m_emitter->setStartSpinVar(60);

//设置结束的时候的自旋转以及自旋转的变化率

m_emitter->setEndSpin(60);

m_emitter->setEndSpinVar(60);

//设置开始的时候的颜色以及颜色的变化率

m_emitter->setStartColor(ccc4f(1,1,1,1));

m_emitter->setStartColorVar(ccc4f(1,1,1,1));

//设置结束的时候的颜色以及颜色的变化率

m_emitter->setEndColor(ccc4f(1,1,1,1));

m_emitter->setEndColorVar(ccc4f(1,1,1,1));

//设置开始时候粒子的大小,以及大小的变化率

m_emitter->setStartSize(30);

m_emitter->setStartSizeVar(0);

//设置粒子结束的时候的大小,以及大小的变化率

m_emitter->setEndSize(20.0f);

m_emitter->setEndSizeVar(0);

//设置每秒钟产生粒子的数目

m_emitter->setEmissionRate(100);

addChild(m_emitter);

 

【上篇】
【下篇】

抱歉!评论已关闭.