在新的一章中,知易帶來了粒子系統的相關知識。如果你不清楚粒子系統到底是怎麼一回事,那就趕快來看一下吧。
在示例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內固定了這個值。
1class 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 = newccparticlesun();
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...