溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

23、Cocos2dx 3.0游戲開發(fā)找小三之粒子系統(tǒng):你那里下雪了嗎?

發(fā)布時(shí)間:2020-07-03 01:21:24 來源:網(wǎng)絡(luò) 閱讀:416 作者:danielzzu 欄目:開發(fā)技術(shù)
重開發(fā)者的勞動(dòng)成果,轉(zhuǎn)載的時(shí)候請(qǐng)務(wù)必注明出處:http://blog.csdn.net/haomengzhu/article/details/30485919

春雨驚春清谷天,夏滿芒夏暑相連, 秋處露秋寒霜降,冬雪雪冬小大寒。

在大自然中,隨處可見一些大規(guī)模運(yùn)動(dòng)的物體,例如下雨時(shí)的雨點(diǎn)、下雪時(shí)的雪花、爆炸時(shí)的火花,甚至旋轉(zhuǎn)的星系、擴(kuò)散的云霧等。

可以看下顯微鏡下的雪,是多么的美!

23、Cocos2dx 3.0游戲開發(fā)找小三之粒子系統(tǒng):你那里下雪了嗎?


當(dāng)我們希望在游戲中模擬這些大規(guī)模運(yùn)動(dòng)的物體時(shí),通常有如下兩種方法。
使用幀動(dòng)畫來模擬。
設(shè)計(jì)幀動(dòng)畫并把它渲染為圖片序列來模擬特效,不但生成的動(dòng)畫體積龐大,也無法調(diào)整其運(yùn)動(dòng)參數(shù),
并且還會(huì)失去其靈活性。

粒子效果的概念
我們把每一個(gè)對(duì)象看做一個(gè)粒子,賦予它們一定的屬性(例如外觀、位置、速度、加速度和生存時(shí)間等),
使它們按照一定的規(guī)律產(chǎn)生、運(yùn)動(dòng)并最終消失。
在粒子效果中,通常存在一個(gè)對(duì)所有粒子進(jìn)行統(tǒng)一調(diào)度的引擎,稱作粒子系統(tǒng)(partical system),
它負(fù)責(zé)粒子的產(chǎn)生,隨時(shí)間改變粒子的狀態(tài),以及最后回收不再需要的粒子。
如果按照粒子系統(tǒng)的維數(shù)來區(qū)分,粒子系統(tǒng)可以分為二維粒子系統(tǒng)與三維粒子系統(tǒng)兩種。

Cocos2d-x 3.0為我們提供的粒子系統(tǒng)由 ParticleSystem 類實(shí)現(xiàn)。
與其他的粒子引擎一樣,ParticleSystem 實(shí)現(xiàn)了對(duì)粒子的控制與調(diào)度,對(duì)粒子的操作包括如下幾種。
1、產(chǎn)生粒子:這部分也被稱作粒子發(fā)射器(emitter)。
2、更新粒子狀態(tài):引擎會(huì)隨時(shí)間更新粒子的位置、速度以及其他狀態(tài)。
3、回收無效粒子:當(dāng)粒子的生存周期結(jié)束后,就會(huì)被系統(tǒng)回收。

因此,為了創(chuàng)建一個(gè)粒子效果,我們需要定義粒子如何產(chǎn)生以及狀態(tài)如何改變。
ParticleSystem 提供了多種初始化方式。 
我們可以通過指定粒子數(shù)量來創(chuàng)建一個(gè)粒子系統(tǒng), 然后需要設(shè)置粒子的外觀 (通常為一張小紋理)、發(fā)射方式與運(yùn)動(dòng)方式。
創(chuàng)建一個(gè)全新的粒子系統(tǒng)通常較為煩瑣,大多數(shù)情況下,我們更樂意把粒子系統(tǒng)的參數(shù)保存在文件中,
而 Cocos2d-x 就是使用 Plist 文件來保存這些參數(shù)的。
暫時(shí)拋開粒子效果文件 Plist 不談,如果我們已經(jīng)擁有一個(gè)粒子效果文件,就可以利用 ParticleSystem 的初始化方法直接從文件中導(dǎo)入一個(gè)粒子效果,相關(guān)代碼如下:
static ParticleSystem * create(const std::string& plistFile);

Plist 文件實(shí)質(zhì)上是一個(gè) XML 文件,我們可以利用任何文本編輯器來創(chuàng)建或修改。
為了創(chuàng)建一個(gè)新的粒子效果,我們可以從Cocos2d-x 的測試樣例目錄下找到一個(gè)現(xiàn)有的粒子系統(tǒng) Plist 文件,修改再使用。

實(shí)際上,引擎已經(jīng)內(nèi)置了若干粒子效果,它們作為粒子系統(tǒng)的樣例,只需要簡單的幾行代碼就可以創(chuàng)建,
內(nèi)置的幾種粒子效果
ParticleFire                火焰效果
ParticleSun                  太陽效果
ParticleExplosion            爆炸效果
ParticleSnow                 雪花效果

粒子系統(tǒng)繼承自Node,可以被添加到其他節(jié)點(diǎn)之中。
在游戲中顯示一個(gè)粒子效果十分簡單。
直接把下面的代碼添加到游戲場景的初始化方法中,給游戲場景添加一個(gè)雪花效果,即可營造一種冬日氛圍。
準(zhǔn)備好一張雪花圖片 snow.png,并在GameScene::init 方法中添加以下代碼:
  ParticleSnow *snow = ParticleSnow::create();   snow->setPosition(Point(480,670));   snow->setTextureWithRect(Director::getInstance()->getTextureCache()->addImage("snow.png"),Rect(0,0,32,32));   addChild(snow);  
成功添加后,就可以看到雪花漫天飄舞的效果了。
23、Cocos2dx 3.0游戲開發(fā)找小三之粒子系統(tǒng):你那里下雪了嗎?

對(duì)于任何粒子系統(tǒng),Texture 都是一個(gè)必須設(shè)置的屬性,粒子系統(tǒng)中的每一個(gè)粒子都使用此紋理渲染出來。
在這個(gè)例子中,每一個(gè)粒子都被賦予雪花紋理,因此可以呈現(xiàn)出雪花飄落的效果。

創(chuàng)建一個(gè)全新的粒子效果需要設(shè)定的參數(shù)過于繁雜,我們完全可以利用引擎內(nèi)置的粒子
示例來實(shí)現(xiàn)一個(gè)粒子效果: 首先找到一個(gè)與期望效果類似的粒子效果, 然后修改紋理, 微調(diào)參數(shù)。

下面我們以 ParticleSnow 為例,展示它是如何設(shè)置參數(shù)的:
bool ParticleSnow::initWithTotalParticles(int numberOfParticles) {     if( ParticleSystemQuad::initWithTotalParticles(numberOfParticles) )      {         // duration         //時(shí)間間隔         _duration = DURATION_INFINITY;          // set gravity mode.         //設(shè)置為重力模式         setEmitterMode(Mode::GRAVITY);          // Gravity Mode: gravity         //重力模式參數(shù): 重力         setGravity(Point(0,-1));          // Gravity Mode: speed of particles         //重力模式參數(shù): 粒子速度         setSpeed(5);         setSpeedVar(1);          // Gravity Mode: radial         //重力模式參數(shù): 徑向加速度         setRadialAccel(0);         setRadialAccelVar(1);          // Gravity mode: tangential         //重力模式參數(shù): 切向加速度         setTangentialAccel(0);         setTangentialAccelVar(1);          // emitter position         //粒子發(fā)射器位置         Size winSize = Director::getInstance()->getWinSize();         this->setPosition(Point(winSize.width/2, winSize.height + 10));         setPosVar(Point(winSize.width/2, 0));          // angle         //角度         _angle = -90;         _angleVar = 5;          // life of particles         //粒子的生命時(shí)間         _life = 45;         _lifeVar = 15;          // size, in pixels         //尺寸(以像素為單位)         _startSize = 10.0f;         _startSizeVar = 5.0f;         _endSize = START_SIZE_EQUAL_TO_END_SIZE;          // emits per second         //每秒發(fā)射粒子數(shù)         _emissionRate = 10;          // color of particles         //粒子著色         _startColor.r = 1.0f;         _startColor.g = 1.0f;         _startColor.b = 1.0f;         _startColor.a = 1.0f;         _startColorVar.r = 0.0f;         _startColorVar.g = 0.0f;         _startColorVar.b = 0.0f;         _startColorVar.a = 0.0f;         _endColor.r = 1.0f;         _endColor.g = 1.0f;         _endColor.b = 1.0f;         _endColor.a = 0.0f;         _endColorVar.r = 0.0f;         _endColorVar.g = 0.0f;         _endColorVar.b = 0.0f;         _endColorVar.a = 0.0f;          Texture2D* texture = getDefaultTexture();         if (texture != nullptr)         {             setTexture(texture);         }          // additive         //禁用線性疊加混合模式         this->setBlendAdditive(false);         return true;     }     return false; } 


粒子編輯器
windows上的一款粒子編輯器,叫做cocos2d-windows-particle-editor
開源地址: http://code.google.com/p/cocos2d-windows-particle-editor/
23、Cocos2dx 3.0游戲開發(fā)找小三之粒子系統(tǒng):你那里下雪了嗎?

23、Cocos2dx 3.0游戲開發(fā)找小三之粒子系統(tǒng):你那里下雪了嗎?
簡單使用概述與說明:

File:save,save as(導(dǎo)出plist文件),new,Open 

Samples:有test里面的一些例子,暫時(shí)版本沒有增加自己添加紋理進(jìn)來功能

編輯器功能說明:

半徑模式:這種只有圍繞中心運(yùn)動(dòng),這個(gè)下面的參數(shù)要有效

編輯器:IsBackgroundMove背景是否動(dòng),Scale縮放

大小:粒子的開始大小和結(jié)束大小

角度:粒子的運(yùn)動(dòng)方向...(-90)垂直朝下

生命:粒子生命

位置:設(shè)置PosVar值,SourcePosition不用管..設(shè)置資源的

紋理渲染:對(duì)于一般情況,只需要記?。骸拔覀冏畛J褂玫腃C_BLEND_SRC和CC_BLEND_DST分別對(duì)應(yīng)GL_ONE和GL_ONE_MINUS_SRC_ALPHA”。

顏色:StartColor, EndColor, StartColorVar, EndColorVar這4個(gè)屬性代表著粒子的初始顏色、結(jié)束顏色以及其浮動(dòng)值。

重力模式:重力、速度等的設(shè)置

自旋:粒子的旋轉(zhuǎn)

EmissionRate:粒子的發(fā)射速率,即每秒發(fā)射的粒子數(shù)量。


郝萌主友情提示:
發(fā)揮自己的想象力,創(chuàng)建屬 于自己的與眾不同的粒子效果、、、

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI