1. 程式人生 > >Cocos2d-x的學習 程式是如何進入到自己的程式碼的 Application有趣的地方

Cocos2d-x的學習 程式是如何進入到自己的程式碼的 Application有趣的地方

版本:cocos2d-x 3.10 語言:C++

今天有點忙啊,有點忙,昨天的研究暫時緩一下。早上的時候看了一會紅孩兒的部落格,深感自己的水平十分的不足。

其中一段Application的東西讓我摸不著頭腦,反覆的研究後終於懂了,那時候的版本是1.0吧,現在應該已經是3.0時代了,回去看了看3.10的原始碼,發現原理還是一樣的。現在我就給大家分享一下。

稍微研究過cocos2d-x的玩家應該都知道,cocos的跨平臺是通過不同平臺的程式程式碼進入到統一的AppDelegate類中,然後AppDelegate在applicationDidFinishLaunching方法中會呼叫第一個場景。

比如win32程式就是通過main.cpp進入的,程式碼如下:

很簡單的程式碼,不過我是沒看懂那個函式傳的一堆引數,不過沒關係,看看自己能看的。

首先從包含的標頭檔案來看,AppDelegate.h在cocos的想法中是不屬於cocos2d中的。然後關注一下最重要的兩行:

AppDelegate app;

return Application::getInstance()->run()

普通的來說,不應該是app.run()嗎?(app建立的時候不是指標建立的,說明函式完了就會被銷燬,也就是說當程式跳出run函式的時候程式就結束了)

我們來看一下getInstance,他的執行例項究竟是從哪裡來的:

可以看到這邊返回的是儲存在內部的一個靜態成員。然後在來看一下這邊的建構函式:

重點關注的是sm_pSharedApplication = this,還有得知道AppDelegate是繼承於Application的。這意味著什麼的?

也就是說AppDelegate app;這一句建立的時候會執行建構函式,會把自身傳遞給sm_pSharedApplication,然後使用靜態函式獲取到該例項run一下就進入到這裡:

運行了AppDelegate實現的applicationDidFinishLaunching方法,然後就進入了自己的程式碼了。

可能是我見識少了,這種方式的建立從來沒見過,平時都是getInstance中直接建立靜態例項,如果建立了就返回。看來真的得多看一些底層的程式碼,瞭解他們是如何去設計自己的類,畢竟這一些引擎的程式碼寫得比較的專業。還得多多學習啊。