七,粒子系統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能夠幫你節省大量的時間並讓你專一於你的遊戲的機制。