1、引擎代碼的下載
官方版本地址為:
http://www.cocos2d-x.org/projects/cocos2d-x/wiki/Download
目前最新版本是cocos2d-2.0-rc0a-x-2.0
官方代碼庫:https://github.com/cocos2d/cocos2d-x/(想嘗鮮或想把自己代碼提交給cocos2d-x的用戶,還可以從https://github.com/cocos2d/cocos2d-x.git fork一個工作流,來進行自己的創造性活動,不過都是用git工具來操作的哦)
2、各平台環境搭建
在此以cocos2d-2.0-rc0a-x-2.0版本為例,下載完成后,把其解壓到任一路徑都有,在此我以我電腦windows 7 旗艦版的環境講解,存放於G:\cocos2d-x(注意此目錄不能有空格,如果有,在后面創建目錄工程時,會創建失敗的) 目錄底下,解壓后的目錄結構和文件截圖如下:
2.2.1 在win32下編譯 cocos2d-x項目
為了生成windows下需要的lib、dll文件,我們需要將解壓后的cocos2d-x項目在win32下編譯一次,我這里是用的是visual studio 2010.
1、雙擊cocos2d-win32.vc2010.sln,將整個cocos2d-x項目打開
2、右鍵點擊解決方案,將整個項目重新生成(或直接按F6 鍵),如下如圖
3、如果一切順利的話,正常會在G:\cocos2d-x\Debug.win32 目錄下生成如下圖目錄:
4、可以看到此目錄下已經編譯成功cocos2d-x項目幾大項目和自帶的一些demo。
我們可以將試着運行下已生成的HelloWorld.exe文件,發現出現找不到資源文件的錯誤:
可以將G:\cocos2d-x\Debug.win32\HelloWorld\Resources 目錄下的所有文件,都復制到G:\cocos2d-x\Debug.win32目錄下,再次雙擊運行發現不報錯,但屏幕沒任何輸出,且任務管理器已經有
這個進程,於是懷疑是windows 7上兼容性的問題,可以試下將HelloWorld.exe設置為在xp sp3模式下運行(點擊右鍵屬性,選擇兼容性)
然后將任務管理器里的HelloWorld.exe進程殺掉,再次運行,終於運行成功HelloWord項目的了(對另外幾個輸出的exe項目也進行類似的設置,則windows 7環境運行沒問題)
5、下來我們為自己真正創建屬於自己的cocos2d-x的win 32項目
首先我們給vs2010安裝工程模板,但默認的工程模板里面寫的都是相對路徑,故我們需要修改下cocos2d-x的vs2010的工程模板,用文本編輯器打開G:\cocos2d-x\template\msvc\CCAppWiz.win32\Scripts\1033目錄下的default.js,找到AddConfigurations函數,發現默認配置的包含文件夾路徑都是相對路徑:
// Additional Inlcude Directories var strAddIncludeDir = '.;..\\Classes'; strAddIncludeDir = ';..\\..\\cocos2dx'; strAddIncludeDir = ';..\\..\\cocos2dx\\actions'; strAddIncludeDir = ';..\\..\\cocos2dx\\base_nodes'; strAddIncludeDir = ';..\\..\\cocos2dx\\cocoa'; strAddIncludeDir = ';..\\..\\cocos2dx\\effects'; strAddIncludeDir = ';..\\..\\cocos2dx\\include'; strAddIncludeDir = ';..\\..\\cocos2dx\\kazmath\\include'; strAddIncludeDir = ';..\\..\\cocos2dx\\keypad_dispatcher'; strAddIncludeDir = ';..\\..\\cocos2dx\\label_nodes'; strAddIncludeDir = ';..\\..\\cocos2dx\\layers_scenes_transitions_nodes'; strAddIncludeDir = ';..\\..\\cocos2dx\\menu_nodes'; strAddIncludeDir = ';..\\..\\cocos2dx\\misc_nodes'; strAddIncludeDir = ';..\\..\\cocos2dx\\particle_nodes'; strAddIncludeDir = ';..\\..\\cocos2dx\\script_support'; strAddIncludeDir = ';..\\..\\cocos2dx\\shaders'; strAddIncludeDir = ';..\\..\\cocos2dx\\sprite_nodes'; strAddIncludeDir = ';..\\..\\cocos2dx\\support'; strAddIncludeDir = ';..\\..\\cocos2dx\\text_input_node'; strAddIncludeDir = ';..\\..\\cocos2dx\\textures'; strAddIncludeDir = ';..\\..\\cocos2dx\\tileMap_parallax_nodes'; strAddIncludeDir = ';..\\..\\cocos2dx\\touch_dispatcher'; strAddIncludeDir = ';..\\..\\cocos2dx\\platform'; strAddIncludeDir = ';..\\..\\cocos2dx\\platform\\win32'; strAddIncludeDir = ';..\\..\\cocos2dx\\platform\\third_party\\win32'; strAddIncludeDir = ';..\\..\\cocos2dx\\platform\\third_party\\win32\\OGLES'; if (wizard.FindSymbol('CC_USE_BOX2D')) { strAddIncludeDir = ';..\\..\\'; } if (wizard.FindSymbol('CC_USE_CHIPMUNK')) { strAddIncludeDir = ';..\\..\\chipmunk\\include\\chipmunk'; } if (wizard.FindSymbol('CC_USE_COCOS_DENSHION_SIMPLE_AUDIO_ENGINE')) { strAddIncludeDir = ';..\\..\\CocosDenshion\\Include'; } if (wizard.FindSymbol('CC_USE_LUA')) { strAddIncludeDir = ';..\\..\\lua\\cocos2dx_support'; strAddIncludeDir = ';..\\..\\lua\\tolua'; strAddIncludeDir = ';..\\..\\lua\\lua';
以及:
function GetTargetName(strName, strProjectName) { try { var strTarget = strName; var nIndex = strName.indexOf("root"); if (nIndex >= 0) { strTarget = strName.substring(0, nIndex) strProjectName strName.substring(nIndex 4, strName.length); } var strTemp = "http://www.cnblogs.com/http://www.cnblogs.com/../lua";//這個也要修改下路徑 nIndex = strTarget.indexOf(strTemp); if (nIndex >= 0) { strTarget = "Classes" strTarget.substring(nIndex strTemp.length, strTarget.length); } return strTarget; } catch (e) { throw e; } }
即如果用默認模板安裝的話,必須使用自帶的解決方案,在此基礎上添加工程的方法創建新的項目,但如果我們要經常做很多不關的cocos2d-x項目,這樣后面豈不是要在一個解決方案管理或者復制粘貼多次原來的解決方案,這明顯是不合理的,所以可以見此腳本中的相對路徑的地方都改為我們cocos2d-x源碼存放的絕對路徑。主要有以下幾處:
// Additional Inlcude Directories var strAddIncludeDir = '.;..\\Classes'; strAddIncludeDir = ';G:\\Cocos2d-x\\cocos2dx'; strAddIncludeDir = ';G:\\Cocos2d-x\\cocos2dx\\actions'; strAddIncludeDir = ';G:\\Cocos2d-x\\cocos2dx\\base_nodes'; strAddIncludeDir = ';G:\\Cocos2d-x\\cocos2dx\\cocoa'; strAddIncludeDir = ';G:\\Cocos2d-x\\cocos2dx\\effects'; strAddIncludeDir = ';G:\\Cocos2d-x\\cocos2dx\\include'; strAddIncludeDir = ';G:\\Cocos2d-x\\cocos2dx\\kazmath\\include'; strAddIncludeDir = ';G:\\Cocos2d-x\\cocos2dx\\keypad_dispatcher'; strAddIncludeDir = ';G:\\Cocos2d-x\\cocos2dx\\label_nodes'; strAddIncludeDir = ';G:\\Cocos2d-x\\cocos2dx\\layers_scenes_transitions_nodes'; strAddIncludeDir = ';G:\\Cocos2d-x\\cocos2dx\\menu_nodes'; strAddIncludeDir = ';G:\\Cocos2d-x\\cocos2dx\\misc_nodes'; strAddIncludeDir = ';G:\\Cocos2d-x\\cocos2dx\\particle_nodes'; strAddIncludeDir = ';G:\\Cocos2d-x\\cocos2dx\\script_support'; strAddIncludeDir = ';G:\\Cocos2d-x\\cocos2dx\\shaders'; strAddIncludeDir = ';G:\\Cocos2d-x\\cocos2dx\\sprite_nodes'; strAddIncludeDir = ';G:\\Cocos2d-x\\cocos2dx\\support'; strAddIncludeDir = ';G:\\Cocos2d-x\\cocos2dx\\text_input_node'; strAddIncludeDir = ';G:\\Cocos2d-x\\cocos2dx\\textures'; strAddIncludeDir = ';G:\\Cocos2d-x\\cocos2dx\\tileMap_parallax_nodes'; strAddIncludeDir = ';G:\\Cocos2d-x\\cocos2dx\\touch_dispatcher'; strAddIncludeDir = ';G:\\Cocos2d-x\\cocos2dx\\platform'; strAddIncludeDir = ';G:\\Cocos2d-x\\cocos2dx\\platform\\win32'; strAddIncludeDir = ';G:\\Cocos2d-x\\cocos2dx\\platform\\third_party\\win32'; strAddIncludeDir = ';G:\\Cocos2d-x\\cocos2dx\\platform\\third_party\\win32\\OGLES'; if (wizard.FindSymbol('CC_USE_BOX2D')) { strAddIncludeDir = ';G:\\Cocos2d-x\\'; } if (wizard.FindSymbol('CC_USE_CHIPMUNK')) { strAddIncludeDir = ';G:\\Cocos2d-x\\chipmunk\\include\\chipmunk'; } if (wizard.FindSymbol('CC_USE_COCOS_DENSHION_SIMPLE_AUDIO_ENGINE')) { strAddIncludeDir = ';G:\\Cocos2d-x\\CocosDenshion\\Include'; } if (wizard.FindSymbol('CC_USE_LUA')) { strAddIncludeDir = ';G:\\Cocos2d-x\\lua\\cocos2dx_support'; strAddIncludeDir = ';G:\\Cocos2d-x\\lua\\tolua'; strAddIncludeDir = ';G:\\Cocos2d-x\\lua\\lua'; }
function GetTargetName(strName, strProjectName) { try { var strTarget = strName; var nIndex = strName.indexOf("root"); if (nIndex >= 0) { strTarget = strName.substring(0, nIndex) strProjectName strName.substring(nIndex 4, strName.length); } var strTemp = "G:/Cocos2d-x/lua/lua"; nIndex = strTarget.indexOf(strTemp); if (nIndex >= 0) { strTarget = "Classes" strTarget.substring(nIndex strTemp.length, strTarget.length); } return strTarget; } catch (e) { throw e; } }
修改完畢,給vs 2010安裝工程模板,雙擊G:\cocos2d-x目錄下的install-templates-msvc.bat文件,會執行一些bat處理命令,windows 7環境中途會出現一寫權限控制的對話框,選擇Y即可,這樣以后每次cocos2d-x版本升級,我們直接替換G:\cocos2d-x目錄下的文件,並重新編譯即可。
6、打開vs 2010,新建項目如果可以出現以下選項,說明工程以安裝到vs2010了
7、我們新建一個cocos2d-win 32 項目
可以看到默認是選中Box2D物理引擎和Cocos Denshion 音頻支持的,我們可以選中默認的,點擊Finish。
8、檢查HelloCocos2d的項目屬性:
右鍵下HelloCocos2d項目=>屬性
查看包含目錄:發現都指向我們之前修改的模板的文件指向的絕對路徑了。至此工程模板安裝成功。
9、按F5調試運行下,發現如下報錯:
錯誤 3 error LNK1104: 無法打開文件“libcocos2d.lib” G:\MyWork\Cocos2d-x application\HelloCocos2d\HelloCocos2d\proj.win32\LINK HelloCocos2d.win32
即我們沒將之前編譯cocos2d-x項目生產的Lib包沒放到HelloCocos2d項目下,將
G:\cocos2d-x\Debug.win32 下所有.lib和dll文件復制到HelloCocos2d\Debug.win32目錄下即可(Tips:為了后續再次創建cocos2d-x win32項目都復制這些dll文件到項目路徑下,可以將其全部復制到系統的system32目錄下)。
重新調試編譯下,發現編譯成功,但是還是沒有輸出任何窗口,還是windows 7兼容性問題,可以參考步驟4的設置方法,設置HelloCocos2d\Debug.win32的HelloCocos2d.win32.exe文件屬性即可,在F5次調試運行,終於成功了:












