知易遊戲開發教程cocos2d x移植版007

2022-09-16 05:27:14 字數 2977 閱讀 6570

在新的一章中,知易帶來了粒子系統的相關知識。如果你不清楚粒子系統到底是怎麼一回事,那就趕快來看一下吧。

在示例6中,我們通過一組實現了炮彈的**效果,這是遊戲開發中常見的表現手法之一,它的理論基礎就是動畫。但是如果我們希望模擬更加真實的效果,比如煙霧、閃電、雨雪、火焰等,我們就需要使用另外乙個工具——粒子系統。

粒子系統是計算機圖形學中模擬模糊現象的技術之一。一般來說,為了表現某一現象,會有大量的微小粒子被建立出來。從巨集觀上講,這些粒子是乙個整體,它們是確定的可控的;從微觀上講,這些粒子各自為戰,每乙個個體都保持著自身的隨機性。

粒子系統能讓你的玩家眼前一亮,整個遊戲都靈動起來。

2023年先驅william t. reeves在《computer graphics》上發表了《particle systems: a technique for modeling a class of fuzzy objects》一文。他向人們介紹了在《star trek ii: the wrath of khan》中使用的粒子系統,被認為是最早掌握此系統的人之一。

維基百科上寫的是william "bill" reeves,**上署名的是william t. reeves,我想應該是同乙個人吧,盧卡斯影業的大牛,皮克斯的創始員工之一。

有興趣的朋友可以去拜讀一下大師的文章,十多頁,我水平有限,看得很慢,只看了個開頭。

額,這方面的知識還真是繁雜啊,為了避免一知半解誤導大家,所以關於粒子系統的詳細介紹請參看知易原教程第7章

或者老g的學習筆記14

讓我們跳過枯燥的原理和引數介紹,關注最基本的使用。

像其他類一樣,cocos2d-x的粒子效果類也提供了靜態函式以方便我們建立其實例。

1     emitter2 =ccparticlesun::node();

2 emitter2->retain();

3 emitter2->settexture(cctexturecache::sharedtexturecache()->addimage(s_fire));

4 emitter2->setposvar(ccp(3, 3

));5 emitter2->setstartsize(20.0f

);6 emitter2->setstartsizevar(2.0f

);7 emitter2->setendsize(0.0f

);8 emitter2->setendsizevar(0.0f

);9 cccolor4f endcolor2 = ;

10 emitter2->setendcolor(endcolor2);

11 emitter2->stopsystem();

12 addchild(emitter2);

使用這種方法的缺點是我們不能指定粒子的數量,因為它在init內固定了這個值。

1

class cc_dll ccparticlesun : public

arch_optimal_particle_system25

virtual ~ccparticlesun(){}6//

使用node方法建立的物件例項預設350個粒子

7bool init()

8virtual

bool initwithtotalparticles(unsigned int

numberofparticles);

9static ccparticlesun *node()

1017

cc_safe_delete(pret)

18return

null;19}

20 };

為了定製粒子的數量,我們會使用另外一種方法:

1     emitter2 = new

ccparticlesun();

2 emitter2->initwithtotalparticles(250

);3 emitter2->settexture(cctexturecache::sharedtexturecache()->addimage(s_fire));

4 emitter2->setposvar(ccp(3, 3

));5 emitter2->setstartsize(20.0f

);6 emitter2->setstartsizevar(2.0f

);7 emitter2->setendsize(0.0f

);8 emitter2->setendsizevar(0.0f

);9 cccolor4f endcolor2 = ;

10 emitter2->setendcolor(endcolor2);

11 emitter2->stopsystem();

還有一種方式,那就是使用粒子編輯器來建立粒子效果檔案。我還沒有嘗試過這種方法,只能以後再補充啦。

需要注意的是,無論使用哪種方式來建立粒子效果物件,請確保設定了紋理,否則渲染時會崩潰。

此外,這裡還涉及到cocos2d-x中物件生命週期的管理。

如果你使用方法一,並將建立的物件儲存在成員變數中,那麼需要呼叫retain來避免其自動釋放掉,並記得在不用的時候呼叫release來釋放。

如果你使用的是方法二,你要時刻記住「誰申請誰就負責釋放」的原則。不過對於這些ccobject物件,請使用release來代替直接delete掉,因為它可能不止乙份引用。

雖然繁雜的引數稍稍變動可能就有乙個新的效果,但是不要有任何心裡負擔,你要堅定信心,常用的就那麼幾個,用的多了自然就會得心應手。粒子系統中不同效果的使用方法是相通的,即便是乙個沒用過的新效果,只要稍微學習一下,也可以立馬上手的。

示例7

在上乙個示例的基礎上,我們只做兩處更改,給敵方坦克的炮彈增加煙霧效果,給我方坦克的炮彈增加火焰效果。

都是非常簡單的呼叫,如果遇到問題,可以參考我上傳的**。

COCOS2D 學習教程

1.在cocos2d裡面如何使用texture packer和畫素格式來優化spritesheet spritesheet.html 2.如何使用cocos2d來做乙個簡單的iphone遊戲教程 第一部分 5 程1.html 3.如何使用cocos2d開發乙個簡單的iphone遊戲 旋轉炮塔。第二部...

使用cocos2d開發iphone遊戲入門概念

簡介 cocos2d iphone是乙個開源框架,利用它可以非常容易的在iphone上開發2d遊戲。它提供了物理,精靈 sprites 時差卷軸 parallax scrolling 支援iphone touch和accelerator等很多功能。一點說明 這一系列文章,翻譯自cocos2d的wik...

使用cocos2d開發iphone遊戲入門概念

簡介 cocos2d iphone是乙個開源框架,利用它可以非常容易的在iphone上開發2d遊戲。它提供了物理,精靈 sprites 時差卷軸 parallax scrolling 支援iphone touch和accelerator等很多功能。一點說明 這一系列文章,翻譯自cocos2d的wik...