一、粒子系统的介绍
介绍下cocos2d-x 粒子系统,粒子系统最早出现在80年代,主要用于解决由大量按一定规则运动(变化)的微小物质在计算机上的生成和显示问题。Particle System的应用非常广泛,大的可以模拟原子弹爆炸,星云变化,小的可以模拟水波、火焰、烟火、云雾等,而这些自然现象用常规的图形算法是很难逼真再现的。
Particle System虽然在处理大量单独粒子的运动(变化)上很有用处,但是一涉及到需要考虑粒子间相互作用的场合,因为这时的计算量呈粒子数量的指数级增长,它就显得有些力不从心了。比如在模拟有相互引力作用下的大量星体的运动,大量粒子的相互碰撞等。
二、粒子系统的生命周期
三、例子相关属性
Variance 浮动值:表示随机上下浮动的修正值,实际值由原始值+浮动值组成,例如Lifespan=5,Lifespan Variance=1 那么随机出来的结果就是4~6
发射器有两种,一种是重力发射器(用于实现在重力条件下的粒子运动),另一种是放射发射器(用于实现在无重力下的粒子运动)。
第一种方法:
- CCParticleSystem* m_emitter;
- m_emitter = CCParticleFireworks::node();
- m_emitter->retain();
- this->addChild(m_emitter, 10);
- m_emitter->setTexture( CCTextureCache::sharedTextureCache()->addImage(“image.png”) );
- m_emitter->setPosition(ccp(489,320));
第二种方法:
- CCParticleSystem* m_emitter;
- m_emitter = new CCParticleSystemQuad();
- m_emitter->initWithTotalParticles(50);
- this->addChild(m_emitter, 10);
- m_emitter->setTexture( CCTextureCache::sharedTextureCache()->addImage(s_stars1) );
- m_emitter->setDuration(-1);
- // gravity
- m_emitter->setGravity(CCPointZero);
- // angle
- m_emitter->setAngle(90);
- m_emitter->setAngleVar(360);
- // speed of particles
- m_emitter->setSpeed(160);
- m_emitter->setSpeedVar(20);
- // radial
- m_emitter->setRadialAccel(-120);
- m_emitter->setRadialAccelVar(0);
- // tagential
- m_emitter->setTangentialAccel(30);
- m_emitter->setTangentialAccelVar(0);
- // emitter position
- m_emitter->setPosition( CCPointMake(160,240) );
- m_emitter->setPosVar(CCPointZero);
- // life of particles
- m_emitter->setLife(4);
- m_emitter->setLifeVar(1);
- // spin of particles
- m_emitter->setStartSpin(0);
- m_emitter->setStartSizeVar(0);
- m_emitter->setEndSpin(0);
- m_emitter->setEndSpinVar(0);
- // color of particles
- ccColor4F startColor = {0.5f, 0.5f, 0.5f, 1.0f};
- m_emitter->setStartColor(startColor);
- ccColor4F startColorVar = {0.5f, 0.5f, 0.5f, 1.0f};
- m_emitter->setStartColorVar(startColorVar);
- ccColor4F endColor = {0.1f, 0.1f, 0.1f, 0.2f};
- m_emitter->setEndColor(endColor);
- ccColor4F endColorVar = {0.1f, 0.1f, 0.1f, 0.2f};
- m_emitter->setEndColorVar(endColorVar);
- // size, in pixels
- m_emitter->setStartSize(80.0f);
- m_emitter->setStartSizeVar(40.0f);
- m_emitter->setEndSize(kParticleStartSizeEqualToEndSize);
- // emits per second
- m_emitter->setEmissionRate(m_emitter->getTotalParticles()/m_emitter->getLife());
- // additive
- m_emitter->setIsBlendAdditive(true);
第三种方法:
- CCParticleSystemQuad *system = new CCParticleSystemQuad();
- system->initWithFile("Images/SpinningPeas.plist");//plist文件可以通过例子编辑器获得
- system->setTextureWithRect(CCTextureCache::sharedTextureCache()->addImage("Images/particles.png")
- , CCRectMake(0,0,32,32));
- addChild(system, 10);
- system->setPosition