cocos2dX 之CCParticle
今天我們來看看粒子特效, 何為粒子特效, 為了模擬燃燒的火焰, 天空飄下來的血環, 滴落的小雨, 這些無規律變化的物體, 我們引進了粒子特效這個名詞, 粒子特效的原理是將無數的單個粒子組合使其呈現出固定形態,借由控制器,腳本來控制其總體或單個的運動,模擬出現真實的效果, 有朋友會問, 為什么我們不使用序列幀動畫呢, 由于序列幀動畫是固定的運動方式, 不能模擬出粒子的無規則運動, 所以我們才使用的粒子特效, 并且繪制的動畫多了, 會嚴重的影響幀率, cocos2dX里面的粒子特效優化的就還不錯, 能夠看到我們待會兒繪制出粒子之后幀率基本上不會發生多大的改變
CCParticleSystem是cocos2dX為我們提供的粒子系統, 我們來看看CCParticleSystem為我們提供了什么
產生粒子: 也被稱作粒子發射器
更新粒子狀態: 引擎會隨時間更新粒子的位置, 速度以及其它狀態
回收無效粒子: 當粒子的生存周期結束后, 會被系統回收
?因此, 為了創建一個粒子效果, 我們須要定義粒子怎樣產生以及狀態怎樣改變。
cocos2dX里面已經為我們提供了一些經常使用的粒子, 我們來看看有哪些:
CCParticleExplosion //爆炸粒子效果
CCParticleFireworks //煙花粒子效果
CCParticleFire //火焰粒子效果
CCParticleFlower //花束粒子效果
CCParticleGalaxy //星系粒子效果
CCParticleMeteor //流星粒子效果
CCParticleSpiral //漩渦粒子效果
CCParticleSnow //雪粒子效果
CCParticleSmoke //煙粒子效果
CCParticleSun //太陽粒子效果
CCParticleRain //雨粒子效果
經常使用的函數:
setTexture( CCTexture2D); //設置特效紋理貼圖
setAutoRemoveOnFinish( bool); //設置自己主動釋放true為自己主動釋放。
setPositionType( 移動類型) //設置移動類型
setStartColor( ccc4f); //設置粒子RGBA值
setBlendAdditive( bool); //是否加入混合
setAutoRemoveOnFinish( bool); //是否自己主動移除死亡粒子
移動類型:
kCCPositionTypeFree //自由模式: 粒子不與發射器聯系
kCCPositionTypeRelative //相對模式: 粒子發射器尾隨節點
kCCPositionTypeGrouped //相對模式: 粒子尾隨發射器
并且cocos2dX還同意我們自定義粒子使用:
CCParticleSystemQuad::create( plist文件);
嗯, 說了這么多, 我們還是先來看看怎樣創建一個粒子吧, 非常easy的:
//創建一個火焰粒子CCParticleSystem* particle = CCParticleFire::create();particle->setTexture( CCTextureCache::sharedTextureCache()->addImage( "CloseSelected.png"));//加入紋理貼圖particle->setAutoRemoveOnFinish( true); //設置自己主動移除 particle->setPosition( ccp( visibleSize.width / 2, 0));addChild( particle);對, 就是這么簡單, 一個火焰粒子就做好了( 旁白: 你確定你沒有騙我?), 我們看看效果:
看看, 出來了吧, 幀率也是60, 沒有下降哦( 旁白: 還不是騙我了, 那是火焰么? 怎么感覺像鬼火一樣), 額, 這是我為了偷懶, 使用了那個藍色的關閉button造成的( 旁白: 必須換過來, 大半夜的, 你嚇人啊), 看著旁白妹紙快要發火了, 我還是決定換一張圖片吧, 話說這張看起來不錯啊, 我們再來看看效果:
看起來沒差別啊, 假設有人看出差別了, 請無視我的美術
嗯, 粒子特效就是這么簡單, 大家把其它的也加上去看看效果吧,?
我們再來看看自己定義粒子效果, 我這里使用的是紅孩兒工具箱, 這是粒子編輯界面:
我們來看看重力參數:
gravity( Point); //粒子系統的重力。
speed( float); //粒子們射出的速度。
speedVar( float); //速度變量
tangencialAccel( float); //粒子們的正切加速度
tangencialAccelVar( float); //粒子們正切加速度的變量
radialAccel( float); //粒子們的半徑加速度。
radialAccelVar( float); //粒子們半徑加速度的變量
半徑參數:
startRadius( float); //粒子的開始半徑
startRadiusVar( float); //開始半徑變量
endRadius( float); //粒子的結束半徑
endRadiusVar( float); //結束半徑變量
rotatePerSecond( float); //環繞一個來源點的每秒旋轉角度
rotatePerSecondVar( 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
我們在粒子編輯器里面做一個火焰:
保存起來, 我們將會得到一個plist文件, 這里面就保存了我們的粒子的配置, 我們直接使用就能夠了:
看看效果:
有的朋友可能會出現故障, 假設出現故障了, 就看看plist文件最以下的圖片文件路徑對不正確:
好了 ?今天我們就到這里了, 晚安哦, 各位
總結
以上是生活随笔為你收集整理的cocos2dX 之CCParticle的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于两台路由器之间的OSPF邻居关系问题
- 下一篇: cocos2dx基础篇(9)——触碰事件