Windows下開發cocos2d-x遊戲設計,官網在釋出版本中建議採用微軟VS軟體作先期作業,之後要移植至手機適用之Android平台上得再利用cocos2d-x提供之執行命令(※須於命令模式下操作)建立專案後,完成此中間流程還得於Eclipse中將程式導入,筆者之前都是採用此模式作業,有時還須安裝其它軟體來支援,如cygwin架設一個迷小Linux模擬系統,對熟悉程式開發之程序員這不算什麼大工程,但筆者有時一直在想此一定會有改進方案,可能VS在未來版本會提供完整之支援方案,或在Eclipse中可透過外掛插件將必要功能安裝進來即可畢其功於一役,省去開發環境之往返切換,近日到Android官網查看文件(http://tools.android.com/recent/usingthendkplugin)及網搜一些進階程序員之開發技巧,找出一個目前極佳的解決方案,當要進行此篇模式之開發環境改善作業,你得具備之前建置環境之概念(※可參考筆者之前post文章,相同流程部份不再講述)再進行後續工作才能得心應手,有幾個較重要之差異點列舉如下:
u   本篇不採用VS 作為開發環境,C++編碼工作可在Eclipse下進行。(VS太龐大且收費高,通用於微軟性質模式之封閉開發,而Eclipse則為Open Source且擴充彈性大)
u   編譯C++代碼不採用透過由cocos2d-x建置專案時自動給予之build_native.sh腳本指令來進行(※因此指令須配合cygwin模擬系統支援作業),而改採NDK   r5版本以上提供之ndk-build.cmd指令,此指令可直接設定於Eclipse中管理即可在視窗模式中進行作業。
記著此篇重點是”改善開發環境之解決方案”而不是全新從頭做起之開發環境建置,一些必備軟體請先行安裝妥置,如coccos2d-xEclipse+Android SDK+Android NDK,這個開發環境方案才是筆者當初一直想用之模式(※因筆者之前開發Android App應用程式時即全都在Eclipse作業,日後切入學習cocos2d-x遊戲引擎時也一直在找此解決方案)
安裝NDK Plugin
Ø   Eclipse執行功能表Help>>Install New Software
Ø   於彈出視窗中之”Work with:“鍵入https://dl-ssl.google.com/android/eclipse/
Ø   待畫面會出現”Developer Tools”及”NDK Plugins”選項時全部選取>>Next>>同意協議>>安裝完成>>重啟Eclipse
Ø   重啟Eclipse後執行Windows>>Preferences>>左側展開Android>>選取NDK,在此處設定NDK安裝根目錄,如C:\android-ndk-r8e
導入cocos2d-x目錄下的示例遊戲
此處以cocos2d-2.1rc0-x-2.1.3/samples/Cpp/SimpleGame自帶之示例遊戲為例作說明:
1.       導入libcocos2d-x函式庫:以滑鼠右鍵點擊Package Explorer空白區域>>Import>>Existing Android Code Into Workspace>>於視窗之Root Directory設為C:\cocos2d-2.1rc0-x-2.1.3/cocos2dx/platform/android/java目錄下,並選取libcocos2dx導入函式庫
2.       依照前步驟導入cocos2d-2.1rc0-x-2.1.3/samples/Cpp/SimpleGame/proj.android示例
此時在Eclipse裡已存在兩個專案:libcocos2dxSimpleGame
設置使用ndk-build來編譯

預先工作:由於不採用cocos2d-x自帶之build_native.sh來進行編譯,故須先將示例使用之資源檔放置專案之assets目錄下,具體作法是把cocos2d-2.1rc0-x-2.1.3/samples/Cpp/SimpleGame/Resources下之所有檔案複製到cocos2d-2.1rc0-x-2.1.3/samples/Cpp/SimpleGame/proj.android/assets目錄下

1.       Package Explorer裡以滑鼠右鍵點擊SimpleGame專案>>Properties>>於左側欄中展開C/C++ Builder>>選取Tool Chain Editor並作如下操作
2.       於左側欄中選取C/C++ Builder>>於右側欄中之BuilderBuild command框中鍵入ndk-build NDK_DEBUG=1
3.       進行編譯,以滑鼠右鍵點擊SimpleGame專案>>Build All,此時在控制台會輸出錯誤訊息,其意為NDK_MODULE_PATH設定有誤 
4.       此錯誤原因乃NDK_MODULE_PATH無法找到編譯過程中需要之函式庫,其解決方法有二:一是直接修改NDK_MODULE_PATH設置參數使其指定至使用之函式庫目錄位置;二是將會使用到之函式庫自cocos2d-2.1rc0-x-2.1.3目錄拷貝一份置放於專案目錄下,但因第一種方法設置NDK_MODULE_PATH參數會造成無法調試C++代碼(※不知何故?不過此法應是最佳方案,筆者之前有看過類似文章,証明可行後再補述),故採用第二種方法來解決:把編譯過程中需要的函式庫拷貝到系統預設的NDK_MODULE_PATH(※過渡期作法,但非為最佳方案)
5.       複製cocos2d-2.1rc0-x-2.1.3目錄下的cocos2dx,CocosDenshion,extensions,external4個目錄到NDK安裝目錄下之sources目錄中,如C:\android-ndk-r8e\sources
6.       再複製cocos2d-2.1rc0-x-2.1.3\cocos2dx/platform\third_party\android\prebuilt目錄的所有檔案到NDK安裝目錄下之sources目錄中。(※有libcurl,libjpeg,libpng,libtiff,libwebp檔案)
7.       重新編譯,以滑鼠右鍵點擊SimpleGame專案>>Build All,此時會編譯成功。(※不成功便成仁,重新Check之前動作)
修改專案檔案結構(使CDT可識別C++)
為讓Eclipse中之C++代碼可設定中斷點,則須修改當前專案之檔案結構使之可運行:
1.       將示例下之cocos2d-2.1rc0-x-2.1.3\samples\Cpp\SimpleGame\Classes目錄移動至cocos2d-2.1rc0-x-2.1.3\samples\Cpp\SimpleGame\proj.android/jni下之位置
2.       修改cocos2d-2.1rc0-x-2.1.3/samples/Cpp/SimpleGame/proj.android/jni下之Android.mk使檔案可指向正確的位置,如下:
LOCAL_SRC_FILES := hellocpp/main.cpp \
               Classes/AppDelegate.cpp \
               Classes/HelloWorldScene.cpp \
                Classes/GameOverScene.cpp

LOCAL_C_INCLUDES := $(LOCAL_PATH)/Classes    
3.       重新編譯,以滑鼠右鍵點擊SimpleGame專案>>Build All,此時會編譯成功。
調試
1.           Classes目錄下的HelloWorldScene.cpp檔裡之ccTouchesEnd方法下一個中斷點,這樣遊戲運行後,點擊螢幕應該可以觸發我們的中斷點
2.           將手機連接到電腦上,以滑鼠右鍵點擊SimpleGame專案>> Debug As>>Android Native Application>>選擇手機型式機號>>調試
3.           遊戲運行起來後,觸控手機螢幕試試。此時Eclipse自動切換到了Debug模式,且成功的中斷點下來,至於變數可在右邊視窗查看,可執行Debug介面上之按鈕試試運作狀況如繼續執行、單步執行。
後序:上述操作中複製了cocos2dx下許多檔案到NDK目錄下,顯得有點繁瑣,此種作法是為了避開去設置NDK_MODULE_PATH參數,因一旦設置了NDK_MODULE_PATH參數會使得調試變得不可行,此非不得已之作法,但透過參數設定應是更好的方法,待解決!

0 意見: