AKever

导航

Cocos2dx(1) 粒子系统 CCParticleSystem

粒子系统 CCParticleSystem(粒子发射器)

在几乎所有的游戏引擎中,都有专属的类来进行生成粒子系统,其中主要有两个功能类:
(1)。粒子:具有大量属性(如生命,方向,速度,加速度等)的结构体或类。表现为一个粒子个体。
(2)。粒子发射器:用来进行生成,控制,回收粒子的管理器类。

在进行粒子系统的创建时,首先把粒子发射器放到某个位置,然后设定要生成的粒子的数量及粒子的起始属性(往往设定生命值为随机),然后在开始创建出粒子并不断的更新粒子,粒子在更新运动状态的同时生命值会被不断的消耗直至死亡。死亡后的粒子被发射器记录回收,为了保证同一时间内有固定数量的粒子在存活中,发射器会在合适的时间重新初始化并运行回收的粒子。

参考:http://blog.csdn.net/houjia159/article/details/12049243

更过的操作,参考API

Cocos2d-x提供粒子特效:
1.CCParticleExplosion 2.CCParticleFire 3.CCParticleFireworks
4.CCParticleFireworks 5.CCParticleGalaxy 6.CCParticleMeteor
7.CCParticleRain 8.CCParticleSmoke 9.CCParticleSnow
10.CCParticleSpiral 11.CCParticleSun

 

     //1.爆炸粒子效果 CC
        CCParticleSystem* particleSystem = CCParticleExplosion::create();
        particleSystem->setTexture(CCTextureCache::sharedTextureCache()->addImage("stars.png"));
        this->addChild(particleSystem);

代码参考:转自http://blog.csdn.net/zhy_cheng/article/details/8289683

            CCParticleSystemQuad *m_emitter=new CCParticleSystemQuad();
            m_emitter->initWithTotalParticles(900);//900个粒子对象
            //设置图片
            m_emitter->setTexture(CCTextureCache::sharedTextureCache()->addImage("snow.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(400,500));
            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);

            ccColor4F cc;
            cc.a=1.0f;
            cc.b=255.0f;
            cc.g=255.0f;
            cc.r=255.0f;
            ccColor4F 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);

参考链接:http://blog.csdn.net/honghaier/article/details/8580390

 四、重力vs半径模式

重力模式

重力模式能够让粒子飞向或者远离一个中心点。这种的优势是它允许一个动态的,组织的效果。你可以用如下代码设置重力模式:

this->m_nEmitterMode = kCCParticleModeGravity;
this->modeA.gravity = ccp(0,-90);

在重力模式中,以下属性是合法的:

gravity (Point)。粒子系统的重力。
speed (float)。粒子们射出的速度。
speedVar(float)速度变量
tangencialAccel(float)粒子们的正切加速度
tangencialAccelVar(float)粒子们正切加速度的变量
radialAccel(float)粒子们的半径加速度。
radialAccelVar(float)粒子们半径加速度的变量

半径模式

半径模式能够让粒子在圆中旋转。也可以创造螺旋模式能让粒子向屏幕里屏幕外飞。你可以设置半径模式用下面的几行代码:

// 半径模式
this->m_nEmitterMode = kCCParticleModeRadius;
// 设置开始半径
this->modeB.startRadius = 0;
this->modeB.startRadiusVar = 0;//ccp(0,0);

半径模式有下列合法的属性:

startRadius (a float).粒子的开始半径
startRadiusVar (a float). 开始半径变量 
endRadius (a float). 粒子的结束半径 
endRadiusVar (a float).结束半径变量 
rotatePerSecond (a float).围绕一个来源点的每秒旋转角度 
rotatePerSecondVar (a float).每秒旋转角度变量

粒子们的常规属性:

粒子们的常规属性:
startSize:粒子的初始尺寸(像素值) 
startSizeVar 
endSize:粒子的结束尺寸(如果你想让粒子的开始大小同结束大笑相同,就用一下kCCParticleStartSizeEqualToEndSize 
endSizeVar 
startColor :粒子开始颜色(ccColor4F) 
startColorVar 
endColor :粒子结束颜色 
endColorVar 
startSpin:仅用在CCParticleSystemQuad中,起始螺旋度 
startSpinVar 
endSpin:仅用在CCParticleSystemQuad中,结束螺旋度 
endSpinVar 
life粒子的生命生存时间,单位是秒 
lifeVar 
angle:粒子开始角度,float 
angleVar 
positon:CCPoint粒子位置 
positonVar 
centerOfGravity :CGPoint

系统通用属性:

emissionRate duration (a float):每秒有多少粒子被发射
duration (a float):粒子系统生存时间
blendFunc (a ccBlendFunc):用于系统渲染的OpenGL的渲染函数
positionType (a tCCPositionType).:使用kCCPositionTypeFree (默认值)属性可以自由的移动粒子们。或者使用kCCPositionTypeGrouped 让粒子们一组一组的移动。
texture (a CCTexture2D).粒子的纹理

 

posted on 2014-01-24 20:55  AKever  阅读(1057)  评论(0)    收藏  举报