聲明:本教程的開發環境為Win32,並且目前只在此平台上做開發實驗。平台的選擇只考慮開發的方便,教程的關注點在於平台之上的層面。
為了搭建一個在Windows下的Cocos2d-x開發環境,我們需要:
1.安裝VS(2010或者2012 Desktop),筆者安裝的是VS Express 2012 For Desktop。
2.下載Cocos2d-x源碼庫。Cocos2d-x的Github地址 https://github.com/cocos2d/cocos2d-x,你可以下載zip包解壓,也可以用git/svn檢出,需要提醒的是不要檢出全部,否則你要等好一陣子,只要檢Head Revision就可以了。
3.編譯。拿到源碼后你會發現有cocos2d-win32.vc2010.sln 和 cocos2d-win32.vc2012.sln 兩個解決方案文件,根據你安裝的VS版本,選擇其中一個打開,然后生成解決方案。提醒:時間可能會稍微長點,另外js和lua的兩個項目可能會有錯,因為文件缺失,這個暫時先不管,因為不會影響cpp的開發,后面有需求在解決。
4.設置工作區。找到template文件夾下的msvc文件夾,哪里面有一些腳本,從名字可以看出他們的用途,運行你的VS版本所對應的腳本即可。提示成功安裝之后,你在打開VS,新建項目,在Visual C++選項上你就可以看到多出一個Cocos2d-x-win32 Application項目。至此你的環境已經安裝完成了。
下面我們稍微再多走一步。
在VS中選擇文件-〉新建項目-〉Visual C++-〉Cocos2d-x-win32 Application,命名為HelloWord,確定之后你會發現VS已經為我們自動初始化了一個模版。將這個項目設為默認啟動項目,然后執行運行命令,你就會看見一個Cocos2d-x Logo赫然在目。
對這個HelloWord項目你不需要去做別的,只要看懂他如何運行的即可,包括一些類的作用以及初始化順序。
首先是AppDelegate類。這個類繼承了CCApplication,而后者是一個與特定平台進行打交道的類,相當於系統與Cocos2d-x間的一個中間人,它繼承自CCApplicationProtocol,正如其名稱所示,他規定了一個不同平台間子類應該實現的共同接口。而針對每一個平台都可以實現一個CCApplication子類,我們在Win32平台下的CCApplication是針對Win32平台來實現的,你在源碼中還可以找到其他平台的CCApplication類,這里就不再贅述。
因為AppDelegate繼承了CCApplication類,所以當實例化AppDelegate對象時,CCApplication也會被調用,從而初始化一些必要的條件。但AppDelegate的作用不止於此,粗略地看一下AppDelegate的定義:
class AppDelegate : private cocos2d::CCApplication { public: AppDelegate(); virtual ~AppDelegate(); /** @brief Implement CCDirector and CCScene init code here. @return true Initialize success, app continue. @return false Initialize failed, app terminate. */ virtual bool applicationDidFinishLaunching(); /** @brief The function be called when the application enter background @param the pointer of the application */ virtual void applicationDidEnterBackground(); /** @brief The function be called when the application enter foreground @param the pointer of the application */ virtual void applicationWillEnterForeground(); };
他需要實現三個接口(構造函數不算),這些接口的作用從其名稱上可以猜得一二,它們提供了一些契機,讓AppDedegate可以選擇地執行一些操作。
為了更深入的理解它我們需要搞清楚一個Cocos2d項目的初始化過程,見下圖:
讀者可以結合斷點調試來理解這個序列圖。
刨去這個過程的一些細節,我們需要掌握這里面的一個主線,這個主線也是我們理解並運用Cocos2d-x的基礎:
這一主線包括:
1.Application級別初始化。通過AppDelegate到CCApplication到CCApplicationProtocol。
2.openGL級別初始化。通過CCEGLView。
3.Director級別初始化。通過CCDirector,以CCEGLView對象為參數,CCDirector是一個核心控制類,他主導整個View。
4.Scene級別初始化。通過CCDirector來運行整個場景,以及進行場景切換。
Scene級別以上的三個都是單例,而Scene則可以有很多個,事實上Cocos2d游戲的實現邏輯即在於不同Scene間的切換。
相關資料均已上傳至Github:https://github.com/Physwf/physwf-c-lab/tree/master/Cocos2d-x%20Tutorial