cocos2d-x開發記錄:二,基本概念(粒子系統,Scheduler和定時器)

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

相關文章
相關標籤/搜索