七,粒子系统objective-c
1.导言函数
术语粒子系统是指计算机图形学技术,它使用大量很是小的精灵或其余图形对象来模拟某些种类的“模糊”现象,于传统渲染技术相比,它很难复制。一般是高度混沌无序的系统,天然现象。化学反应过程等。
this
2.点与象限spa
在早起的cocos2d-x的版本中,有两个类型的粒子系统:象限和点这两种粒子系统:code
◆CCParticleSystemQuad对象
◆CCParticleSystemPointblog
与CCParticleSystemPoint相比CCParticleSystemQuad有这些额外的功能:游戏
◆旋转的粒子,粒子能够围绕它的轴旋转。CCParticleSystemPoint忽略这个属性。事件
◆粒子能有任何大小。在CCParticleSystemPoint中,若是大小是大于64,它将被视为64。内存
◆整个系统能使用缩放属性被缩放。
由于CCParticleSystemPoint不支持CCParticleBatchNode,它已从cocos2d-x粒子系统中删除。
3.CCParticleBatchNode
一个CCParticleBatchNode能引用一个而且仅有一个纹理(一个图像文件,一个纹理地图集)。只有在纹理中被包含的CCParticleSystems能被添加到CCSpriteBatchNode。全部CCParticleSystems添加到CCSpriteBatchNode中被OpenGL ES绘制调用一次。若是CCParticleSystems没有被添加到一个CCParticleBatchNode那么OpenGL ES须要为每个CCParticleSystems来绘制调用,这是很是低效率的。
4.建立一个象限Particle System
CCParticleSystemQuad* m_emitter = newCCParticleSystemQuad();
m_emitter = CCParticleFire::create();
5.Gravity 对 Radius 模式
Gravity(重力)模式
重力模式让粒子系统飞向或远离一个中心点。它的长处是在于容许很是动态有组织的效果。设置的代码以下:
// Gravity Mode this->m_nEmitterMode = kCCParticleModeGravity; // Gravity Mode: gravity this->modeA.gravity = ccp(0,-90);
如下这些属性只在重力模式下有效:
gravity (一个CGPoint)粒子系统的重力
speed (float) 粒子的发射速度
speedVar (float)速度的方差
tangencialAccel (float)粒子的正切加速度
tangencialAccelVar (float) 正切加速度方差
radialAccel (float)粒子的半径加速度
radialAccelVar (float) 半径加速度方差
Radius(半径)模式
半径模式可让例子旋转成一个圈。它还容许你建立要么向内或向外冲的螺旋效应的粒子。设置代码以下
// Radius Mode this->m_nEmitterMode = kCCParticleModeRadius; // Radius Mode: startRadius this->modeB.startRadius = 0; this->modeB.startRadiusVar = 0;//ccp(0,0);
如下这些属性只在半径模式下有效:
startRadius (float) 粒子系统的起始半径
startRadiusVar (float) 起始半径的方差
endRadius (float)粒子系统的结束半径
endRadiusVar (afloat) 结束半径的方差
rotatePerSecond (float)每秒围绕原点旋转度数
rotatePerSecondVar (float) 度数方差
6.全部模式的通用属性
如下是粒子系统的通用属性
startSize: 粒子颗粒的起始像素大小
startSizeVar
endSize: 若是你想要使用kCCParticleStartSizeEqualToEndSize开始大小==最终尺寸。
endSizeVar
startColor (ccColor4F)
startColorVar (ccColor4F)
endColor (ccColor4F)
endColorVar (ccColor4F)
startSpin:仅用于CCParticleSystemQuad
startSpinVar:仅用于CCParticleSystemQuad
endSpin:仅用于CCParticleSystemQuad
endSpinVar:仅用于CCParticleSystemQuad
life:短期内粒子生存的时间
lifeVar:
angle: (a float)粒子的起始角度
angleVar
positon: (CGPoint)
posVar
centerOfGravity (CGPoint)
系统的通用属性
emissionRate (float)。每秒发射多少粒子
duration (float)。粒子系统存在多少秒(和live属性不一样)。使用kCCParticleDurationInfinity表示无限。
blendFunc (ccBlendFunc)。用于系统的OpenGL混合函数
positionType (tCCPositionType)。使用kCCPositionTypeFree(默认)自由移动粒子,或使用kCCPositionTypeGrouped移动一个组。
texture (CCTexture2D)。用于粒子系统的纹理
例子
cocos2d-x附带一些预约义的粒子,在运行时能够定制。列出预约义的粒子
CCParticleFire: Point particle system. Uses Gravity mode.
CCParticleFireworks: Point particle system. Uses Gravity mode.
CCParticleSun: Point particle system. Uses Gravity mode.
CCParticleGalaxy: Point particle system. Uses Gravity mode.
CCParticleFlower: Point particle system. Uses Gravity mode.
CCParticleMeteor: Point particle system. Uses Gravity mode.
CCParticleSpiral: Point particle system. Uses Gravity mode.
CCParticleExplosion: Point particle system. Uses Gravity mode.
CCParticleSmoke: Point particle system. Uses Gravity mode.
CCParticleSnow: Point particle system. Uses Gravity mode.
CCParticleRain: Point particle system. Uses Gravity mode.
八,Scheduler (任务调度)和Timer Callback(定时器回调)
两种不一样的回调类型CCScheduler vs NSTimer(objective-c中的定时器)
Scheduler负责触发回调任务
1.一个不一样类型的callbacks selectors:
Update selector:它会每帧调用。你能自定义优先级
Custom selector: 它能自定义间隔时间
应该尽量地避免选择自定义选择器。更新选择器更快和更少的内存消耗。
2.CCScheduler vs NSTimer
Cocos2D调度器提供你游戏的定时事件和调用。你不该该使用NSTimer。应该使用CCScheduler类。
◆CCNode 对象知道如何调用和取消调度事件而且使用Cocos2D调度器有几个独特的优点比使用NSTimer要好
◆只要CCNode再也不可见或从场景中移除,调度器就会释放。
◆当Cocos2D 暂停或恢复被rescheduled时,调度器也会释放
◆自从最近一次调度器被调用后开始,下次调用后调度器传递一个单位为milliseconds的间隔时间。这个间隔时间对物理引擎是很是有用的。
◆使用this->scheduleUpdate()会确保你的更新函数将会在每帧渲染以前被调用
所以,CCScheduler能够帮你节省大量的时间并让你专一于你的游戏的机制。