與上一篇隔了好長時間,期間遇到期末考試内列,又是趕上新年撵术,所以落下了一段時間沒有寫。
最近轉(zhuǎn)戰(zhàn)到Unity3D了话瞧,也打算出個學習記錄嫩与,在此順便做個提前預告,希望喜歡Unity3D的小伙伴們能夠多多指教哦交排!
前情回顧
上一篇划滋,我們分析了Cocos2d-x自帶的HelloScene,理清了了從引擎啟動埃篓,到顯示第一個Scene的過程处坪。
“紙上得來終覺淺,覺知此事要躬行〉巨保”這一篇呢,我們就來實現(xiàn)自己的場景胶征。
1. 添加自己的場景類
普通的C++類塞椎,兩個文件,一個頭文件睛低,一個源文件案狠。
首先來看的是頭文件,看看定義了那些接口钱雷。
'
仿照HelloWorldScene頭文件,定義了一個成員函數(shù)骂铁,一個靜態(tài)方法,和一個宏函數(shù)罩抗,下面逐個介紹一下為什么要定義這些函數(shù)拉庵,以及它們都有什么作用。
1.virtual bool init()
這是MyScene的初始化函數(shù)套蒂。Cocos2d-x在構(gòu)造新對象時钞支,采用了創(chuàng)建和初始化分開的操作。new
操作實際上進行的主要任務(wù)就是對象內(nèi)存的分配操刀,對象屬性初始化的工作集中在了init
函數(shù)中烁挟。有一點需要注意的是,子類的init
函數(shù)實現(xiàn)的時候骨坑,需要手動調(diào)用父類的init
函數(shù)撼嗓,來進行父類的初始化;沒有構(gòu)造函數(shù)能夠自動初始化父類的功能欢唾。再說init
的返回值且警,指示的是對象初始化是否成功。
static cocos2::Scene* createScene();
靜態(tài)工廠函數(shù)礁遣,負責場景的創(chuàng)建振湾。如果你比較細心,就會發(fā)現(xiàn)亡脸,我們的MyScene
它其實不是個Scene,它繼承的是Layer
啊押搪。這邊因為只是一個小的 場景,所以并沒有把場景和層區(qū)分的太開浅碾。事實上大州,場景可以看作是許多Layer的容器,一個場景可以有許多的Layer垂谢。一般來說厦画,場景是看不見的,而Layer確實實在可見的。
這里的靜態(tài)函數(shù)根暑,是創(chuàng)建了一個Layer力试,然后也創(chuàng)建了一個Scene,將Layer添加到Scene中排嫌,故其名字叫做createScene
畸裳。CREATE_FUNC
宏函數(shù)
關(guān)于這個宏的講解在前面一篇中有所提到,如果不太記得的小伙伴可以翻看前面一篇cocos2dx之HelloWorld代碼分析
淳地。這里再次簡述一下怖糊,這個宏函數(shù)負責創(chuàng)建了MyScene
對象,加入到了自動釋放池颇象,并且調(diào)用了它的init
方法伍伤。這個方法不需要實現(xiàn),宏幫助你自動完成了遣钳。
2. 實現(xiàn)init
方法
這是我們的實現(xiàn)扰魂。
很簡單,添加了紅綠藍三個矩形方塊蕴茴。正如前面所說的阅爽,我們看到在這兒調(diào)用了父類中的init
方法,并且也根據(jù)其返回值來判斷是否初始化成功荐开。
關(guān)于三個層的創(chuàng)建代碼付翁,此處按下不表,后面章節(jié)會做細致的解釋晃听。
此處需要注意的是addChild
函數(shù)的調(diào)用百侧,需要將創(chuàng)建的Layer加入到我們的MyScene中,為什么要這樣呢能扒?原因是cocos2dx采用了樹形的對象管理方案佣渴,創(chuàng)建的三個colorLayer
通過調(diào)用addChild
函數(shù)成為了MyScene
的子對象,引擎在渲染MyScene
對象的時候初斑,會把它的子對象一并進行渲染辛润。別忘了最后返回一個true
,來說明你的對象如期創(chuàng)建成功了见秤。
3. createScene
靜態(tài)函數(shù)的實現(xiàn)砂竖。
場景創(chuàng)建的一個靜態(tài)工廠函數(shù)。代碼真的是一目了然鹃答,先創(chuàng)建一個場景乎澄,然后創(chuàng)建一個層,把層加入到場景中测摔,返回該場景置济。
3. 運行我們的Scene
前一篇我們知道解恰,引擎啟動時候會調(diào)用bool AppDelegate::applicationDidFinishLaunching()
函數(shù),在此浙于,我們切換到AppDelegate.cpp
文件护盈,找到bool AppDelegate::applicationDidFinishLaunching()
函數(shù),在函數(shù)最后添加如下代碼:
相關(guān)的頭文件包含羞酗,相信熟悉C++的你一定會厭煩我再重復腐宋。
編譯生成之后,就可以看到相應(yīng)的效果了整慎。
如果有什么問題的歡迎在下面評論區(qū)提出,我一定給你細致答復围苫。加我微信也可:LCJY93,歡迎指教裤园。
結(jié)尾
希望你的游戲開發(fā)之旅充滿快樂,希望你和我一樣熱愛游戲剂府,熱愛游戲開發(fā)拧揽!
下回預告
是時候展現(xiàn)真正的技術(shù)了!