本教程由泰然教程組出品
Cocos2D是一個很是棒並且很是容易使用的遊戲框架,可是,因爲它是基於objc語言的,因此你只能使用它來開發ios和mac下面的遊戲。
假如你可使用和cocos2d類似的api來開發android上面的遊戲,那豈不是更爽?這樣,你就能夠絕不費勁地擴大你的遊戲的市場份額(android的用戶數量巨大啊!)
好吧,確實存在這麼一個遊戲框架,她就是cocos2d-x!cocos2d-x基於c++把cocos2d的api從新移植了一遍,,除了一些語法細節上面的差別以外,你可使用幾乎同樣的api來編寫遊戲。正是因爲它是c++寫的,因此能夠跨多個平臺,從ios到android、windows、再到linux、bada等!
在這篇教程裏面,你將學習到,如何使用cocos2d-x和c++來編寫一個可以同時在ios和android設備上面跑的「Hello World」程序。
並且,過兩天,我會再出一篇教程,向你們展現一個具體的遊戲例子—一個跨平臺的太空射擊遊戲!
好了,帶上你的iPhone和Android設備,讓咱們開始吧!
Hello, Cocos2D-X for iOS!
在繼續以前,確保你先下載最新版本的cocos2d-x。(中文地址:cn.cocos2d-x.org)
隨便在你的硬盤的某個位置上面解壓就能夠了。注意,這個解壓出來的文件夾的完整路徑名,咱們以後會用一個統一的別名 $COCOS2DX_HOME來指代。
如今,你已經下載到源碼了,讓咱們來安裝項目模板吧!你能夠先cd到$COCOS2DX_HOME這個目錄(譯者:指你剛剛解壓縮代碼的存放路徑)下面去。在安裝模板以前,先退出Xcode,而後打開一個終端,並輸入下面的命令:
- cd $COCOS2DX_HOME sudo ./install-templates-xcode.sh -u
注意: 在上面所示的代碼中,你不能直接輸入$COCOS2DX_HOME,而要輸入實際的路徑。若是你直接輸入了$COCOS2DX_HOME是不會有任何反應的。固然,你能夠參考我寫的《如何在macos下面配置集成ios和android遊戲教程》,裏面有講到環境變量的配置。大概方法就是打開~/.bash_profile文件,而後用export來定義環境變量就ok了。
你可能會被要求輸入管理員密碼(加了-u應該是不須要輸入密碼的,不加-u就須要輸入),以後的過程就很是簡單了。在模板安裝好以後,啓動xcode,而後建立一個新的項目。這時,你能夠在項目模板對話框中看到有cocos2d-x的模板了。不用擔憂,cocos2d-x的模板與cocos2d的模板並不會有衝突,所以,你仍是能夠建立cocos2d的項目。
讓咱們來試一下新模板吧!打開Xcode,而後建立一個新的工程,選擇 iOS\cocos2d-x\cocos2dx模板,以下圖所示:
把工程命名爲Cocos2DxFirstIosSample,而後保存。
如今,編譯並運行,你將會看到cocos2d-x的hello wolrd程序跑起來了,以下圖所示:
很是簡單,不是嗎?這時,你能夠看看xcode裏面的文件,特別是Classes\HelloWorldScene.H和Classes\HelloWorldScene.cpp。若是你也熟悉cocos2d的話,那麼裏面的代碼看起來會以爲很是熟悉—幾乎徹底同樣的cocos2d API,只是語言是c++而已!
配置cocos2d-x的eclipse開發環境
如今咱們已經完成了Xcode4的hello world程序了,是時候看看如何使用eclipse來配置android的cocos2d-x開發環境了。
這篇教程假設你有一個能夠進行Android開發的標準開發環境。若是你尚未的話,能夠參考這篇教程來配置,它裏面提供了詳細的過程,教你如何一步步配置好一個標準的eclipse android開發環境。
可是,請等一下。一個標準的eclipse android開發環境是專爲java開發設計的,而cocos2d-x倒是基於c++來作開發的!
不用擔憂,eclipse已經有10年的歷史了,它有許多插件能夠支持其它語言的開發,這固然就包括c/C++語言的插件啦。先讓咱們來安裝這個插件吧。打開eclipse,而後執行如下步驟:
· 從Eclipse IDE的主工具欄上面,選擇Help/Install New Software。
· 打開Work With複選框,並從中選擇一個包含你的eclipse版本名稱的項(若是是最新版的eclipse的話,就選擇indigo)
· 在插件樹裏面找到Programming Languages (只有當你複選中「Group items by category」時,你才能夠看到插件樹。)並打開它.
· 選擇CDT插件,而後安裝下列組件。(可是,請注意,你若是直接就點擊C/C++ Development Tools的話,你是得不到下圖所示的樣子的,你還須要在「Mobile Development」裏面去查找相關的項)(譯者:我沒找了,直接就選擇了C/C++ Development Tools就Next安裝了)
點擊next來完成嚮導,而後等待組件下載並安裝。如今,你可使用eclipse來開發C/C++項目了!
Setup the Android NDK (Native Development Toolkit)
原本,android開發只能採用java,並且如今市場上面大部分的app也是採用java寫的。
然而,如今你還能夠經過Native Development Toolkit (NDK),使用C/C++來編寫android程序。這種編程方式是由Google在2009年6月份引入的,它容許一些組件採用C/C++來編寫,而後經過標準的Java Native Interface (JNI)來調用。
安裝NDK的過程很是簡單:
· 下載最新版本的NDK。 here (注意選擇 MacOSX 平臺).
· 解壓tar.bz2 到任意目錄.以後,我會使用$NDKROOT來指定這個解壓縮後的目錄。
NDK給Android開發帶來了全套的C/C++編譯工具集,可使用GCC4.4.3來編譯來連接而且能夠構建即時安裝的APK包。
有了這套編譯工具集,咱們就能夠在eclipse裏面集成一些外部的C/C++庫(好比cocos2d-x)。這些庫被編譯成動態庫,而後經過JNI(Java Native Interface)與Java Android體系程序進行交互。
這些編譯工具集能夠採用下面兩種方式使用 :
· 獨立模式: 直接在你的makefile中使用 arm-linux-androideabi-g++. 這種方式會增長你的項目的複雜性和可維護性。我推薦你不要使用這種方式。
· 集成模式: 使用$NDKROOT/ndk-build shell 工具,它是一種高度可定製的makefile,專門爲NDK庫所設計的。這也是咱們這篇教程所採用的方式。
解釋JNI和NDK可能會花費大量時間,並且也超出了本教程的討論範圍。如今網絡上有許多關於JNI的資源。這裏還推薦一本書,它也討論了JNI這個主題。
若是你須要更多關於NDK的信息,這裏推薦一本很是好的書,它裏面涵蓋了使用C/C++進行NDK開發,書名是: Android Native Development Kit Beginner’s Guide。這本書覆蓋了NDK編程的方方面面,可謂是「從入門到精通」,並且NDK自己也帶有很是詳細的文檔,在$NDKROOT/docs路徑下面。
Hello, Cocos2D-X for Android!
如今,讓咱們在Andriod平臺上面來開發一個「Hello,World」程序吧,就像咱們以前在ios平臺上的程序同樣。
咱們須要經過命令行來完成工做,由於目前尚未在Eclipse IDE裏面集成cocos2d-x的模板。
在$COCOS2DX_HOME目錄下面包含一個shell腳本,叫作create-android-project.sh,咱們可能經過它來建立android項目。可是,在運行腳本以前,咱們須要在腳本文件的頂部作一些修改:
- # set environment paramters NDK_ROOT_LOCAL="/home/laschweinski/android/android-ndk-r5" ANDROID_SDK_ROOT_LOCAL="/home/laschweinski/android/android-sdk-linux_86"
修改上面這些行,把NDK_ROOT_LOCAL指向你安裝Android NDK ($NDKROOT)的位置,同時把ANDROID_SDK_ROOT_LOCAL指向你安裝Android SDK位置。(譯者:這裏其實能夠不用修改,讀者能夠打開這個sh腳本去看看爲何。若是以前看過個人配置教程,裏面有配置一個全局的NDK_ROOT和ANDROID_SDK_ROOT。這個腳本在判斷有全局的環境變量存在的時候,會直接替代NDK_ROOT_LOCAL和ANDROID_SDK_ROOT_LOCAL。)
如今,能夠運行create-android-project.sh腳本了,而後你會接收到一系列的提示輸入。咱們將一個個向您解釋一下:
1. 第一個提示要求你「Input package path」。這個包名會給後面的java代碼使用。你可使用你的域名反過來寫,相似寫ios的bundle ID。好比com.yourdomain.samplecocos2dxandroid ,記住實際輸入的時候要替換掉「com.yourdomain」。
2. 接下來,你會獲得一系列可用的Android API和它們的id號。這個具體取決於你的機器上面安裝的Andriod API的狀況。
3. 最後,你須要提供項目的名稱,在這裏取名爲samplecocos2dxandroid:
命令行的輸出大體以下:
- bash-$ ./create-android-project.sh
- Input package path. For example: org.cocos2dx.example
- org.jymc.samplecocos2dxandroid
- . . .
- Available Android targets:
- ----------
- . . .
- ----------
- id: 9 or "Google Inc.:Google APIs:15"
- Name: Google APIs
- Type: Add-On
- Vendor: Google Inc.
- Revision: 1
- Description: Android + Google APIs
- Based on Android 4.0.3 (API level 15)
- . . .
- input target id:
- 9
- input your project name:
- samplecocos2dxandroid
- Created project directory: /Users/jymen/development/cocos2dx/samplecocos2dxandroid
- . . .
- Added file /Users/jymen/development/cocos2dx/samplecocos2dxandroid/AndroidManifest.xml
- Added file /Users/jymen/development/cocos2dx/samplecocos2dxandroid/build.xml
- Added file /Users/jymen/development/cocos2dx/samplecocos2dxandroid/proguard.cfg
- bash-$
注意「Created project directory:」這一行是腳本文件最後輸出來的,這個輸出的路徑也就是你的Andriod項目被建立好的路徑。我這裏指的是/Users/jymen/development/cocos2dx/samplecocos2dxandroid,如上圖所示:
注意: 不要把項目從一個地方移動到另外一個地方。由於你若是隨意移動,有些腳本文件能夠跑不起來。
構建工程
這裏有兩個步驟來構建項目—-首先經過命令行腳本編譯c++代碼,而後經過ecipse來編譯java代碼。
爲了編譯c++代碼,咱們須要切換到$PROJECT_HOME/android文件夾下面去,而後在終端裏面輸入下列命令:
- ./build_native.sh
你應該會看到下面相似的輸出:
- Gdbserver : [arm-linux-androideabi-4.4.3] libs/armeabi/gdbserver
- Gdbsetup : libs/armeabi/gdb.setup
- Compile++ thumb : cocos2d libs/armeabi/libcocos2d.so
- Compile++ thumb : cocosdenshion libs/armeabi/libcocosdenshion.so
- Compile++ thumb : game_logic libs/armeabi/libgame_logic.so
- Compile++ thumb : game libs/armeabi/libgame.so
這裏就是在編譯cocos2d-x庫和你的項目裏面的c++文件。
爲了編譯java代碼,咱們須要建立一個eclipse工程—這可比命令行要方便多了。:)
打開Eclipse,而後他吃軟飯File\New\Other,選擇Android\Android Project,而後點擊Next,在Project Name裏面輸入samplecocos2dxandroid ,而後選擇 Create project from existing source,而後瀏覽到$PROJECT_HOME/android文件夾,以下圖所示:
點擊Next,選擇一個 Android version to target(這裏選擇的是3.2,你能夠選擇任何一個)
點擊Finish,好了,如今你有一個工程了!
在左邊的樹上右擊項目,選擇Run As\Android Application,而後AVD (Android Virtual Device)就會啓動,而後就會跑出來Hello, Cocos2D-X項目了!
注意:若是程序沒有啓動的話,你須要按照提示去建立一個AVD來測試。更多的細節,請參考Getting Started with Android Development 這篇教程。
恭喜你,你如今有一個「Hello,World」項目能夠同時跑在ios和android上面了!
在Eclipse裏面定義一個結合java/c++的工程
經過命令腳原本編譯c++代碼,完了以後用eclipse來編譯java代碼,這種來回切換的作法很是笨重。若是所有能夠用eclipse來完成的話,那麼生活會更簡單一些。
幸運的是,咱們能夠告訴eclipse,咱們的android項目是一個集成java/c++的跨語言項目!
爲此,咱們在左邊的項目樹上選擇samplecocos2dxandroid,而後從菜單裏面選擇File\New\Other,而後從對話框裏面選擇C/C++\Convert to a C/C++ Project,以下所示:
點擊Next。在下一個屏幕裏面,選中你的項目,而後選擇c++單選按鈕,而後爲Project type指定Makefile project\Other Toolchain,以下所示:
點擊完成。這時eclipse會詢問你是否打開C/C++視圖,當對話框出現的時候,選擇NO。
接下來的步驟就是修改項目設置,指定如何運行咱們的make命令。在左邊的項目樹上,右擊samplecocos2dxandroid工程,選擇Properties,而後選擇C/C++ build
取消「Use default build command」複選框,而後在build文本框中輸入下面的命令:
- bash ${workspace_loc:/samplecocos2dxandroid}/build_native.sh NDK_DEBUG=1 V=1
點擊Apply,而後點OK。
回到eclipse,從主菜單中選擇Project\Build All,這時你能夠在eclipse的控制檯輸出中看到c++ make在運行。
咱們仍然有一些警告須要解決。想知道我是什麼意思嗎,你打開jni/helloworld/main.cpp,這裏你會看到一系列的警告,以下所示:
這些警告之因此會出現,是由於咱們沒有配置正確的c++包含路徑。爲了解決它,咱們右擊samplecocos2dxandroid工程,而後選擇Properties\C/C++ General\Path and Symbols\GNU C++。
選擇Add…按鈕來選擇下面的目錄,以後點擊Apply和OK。
- $(NDKROOT)/platforms/android-9/arch-arm/usr/include $(COCOS2DX_HOME)/cocos2dx/include
注意: 不用忘了使用實際的路徑來替換掉$(NDKROOT) 和$(COCOS2DX_HOME)。
點擊Apply,這時會提示你是否重建索引。直接點擊yes繼續就能夠了。
如今,你再看看main.cpp,你會看到大部分警告已經消失了。
可是,AppDelegate.h文件仍是找不到。這是由於AppDelegate.h是在$PROJECT_HOME\Classes文件夾下面。這個文件夾對咱們來講很是重要,由於它包含了咱們工程裏面的可移植的c++類,好比HelloWorldScene.cpp等。
當咱們建立eclipse項目的時候,咱們必須選擇$PROJECT_HOME\android文件夾,由於eclipse須要一個AndroidManifest.xml文件。可是,這樣的話,咱們的工程就不包括關鍵的「Classes」文件夾了,這也是爲何咱們會獲得這麼多警告的緣由。
讓咱們來修正它吧。右擊samplecocos2dxandroid項目,選擇Properties\C/C++ General\Paths and Symbols\Source location。點擊Link Folder,而後複選中Link to a folder in the file system,接着瀏覽到$PROJECT_HOME文件夾,並指向Classes目錄,最後點Apply和OK。
你如今能夠在文件樹裏面看到Classes目錄了,並且在main.cpp裏面的#include 「AppDelegate.h」警告也應該消失了。
Eclipse工程裏面還會有許多警告,可是,這是由於eclipse對於解析c++頭文件的能力並不強大。爲了消除這些警告,咱們又須要設置一下項目設置。(右鍵點工程,而後選擇Properties),把Code Analysis部分的warnings關閉,以下圖所示:
而後點擊Apply和OK,這時,你就獲得一個工程能夠在eclipse裏面進行編輯了。
What About the Java Code?
這時你在eclipse裏面再找找看,你會在src和gen目錄下面找到一些java代碼,你確定很好奇這些代碼是幹嘛用的。
Andriod開發採用的主要語言是java,這個項目模板已經爲咱們建立了一些java框架代碼,用來加載c++編寫好的動態庫。
通常狀況下,你是不須要修改這些java代碼的,可是,仍是讓咱們來看看src\com\xxx\samplecosos2dxandroid\samplecocos2dandroid.java這個類。
這個類包含了主Android Activity類,當應用程序啓動的時候會加載。它首先經過NDK來請求編譯好的c++動態庫。(若是採用的是最新版的coocs2dx的話,下面只會加載一個game庫)
因爲類是從Cocos2dxActivity所派生,在後臺cocos2d-x會把控制權移交給c++的AppDelegate的initInstance方法來處理,最後applicationDidFinishLAunching方法也就被執行起來了。
所以,再重申一遍,java代碼只是一些包裝代碼,大部分狀況下咱們都不要去修改它,由於咱們的遊戲邏輯是由c++寫的。
鏈接andriod和ios項目結構
如今,咱們有兩個cocos2d-x的項目了,一個是ios下面的,一個是andriod下面的。咱們的目標是讓兩個工程共享一樣的目錄,這樣就可使用一樣的c++文件了。
咱們兩個項目裏面,都有一個文件夾叫作「Classes」,它包含了咱們的可移植的遊戲代碼(以下圖:android的在左邊,ios的在右邊)
若是你仔細看看eclipse和xcode裏面的Classes目錄,你會發現這些c++文件徹底相等。所以,咱們須要作的就是讓兩個項目指向同一個文件夾就ok了!
爲了實現這個目標,在xcode裏面打開Cocos2DxFirstIosSample項目。選擇Classes分組,而後點擊Delete,選擇「Move to Trash」;
接下來,右鍵Project Navigator,選擇「New Group」,而後重命名爲Classes。點鍵Classes,點擊Add Files。而後選擇$PROJECT_HOME\Classes目錄,同時確保「Copy items into destination group’s folder」沒有被選中!
而後clean並rebuild xcode項目,並運行一下,確保一切ok。
恭喜,如今基礎配置所有弄好了!你能夠試着在eclipse裏面修改,xcode這邊運行,或者xcode裏面修改,eclipse裏面運行了。
何時使用 Xcode, 何時使用Eclipse?
如今,你有兩個項目了,那麼問題立刻就出來了,咱們到底何時該使用哪個呢?
使用cocos2d-x一般的開發策略是,首先在ios上面經過xcode來測試,確認沒問題後,再經過eclipse來測試。只須要在內心記住下面幾點就行:
1. 常常測試.開發完一個小功能以後,就應該在andriod上面測試看行不行。這樣的話,就不至於遇到問題找不到了。
2. 在多個設備上面測試: 如今市場上面有大量的android設備,並且它們的差異很細微,因此,你要儘量多地測試多種不一樣型號的設備。
固然,你也能夠先在andriod上面測試,而後再在ios上面測試。可是這樣確定會下降你的生產率。由於xcode比eclipse反應速度更快,而ios模擬器比android的模擬器的啓動速度也要快一些。
調試技巧
在ios上面調試cocos2d-x和cocos2d的方法差很少,這裏也沒什麼多講的。
然而,對於Android,這裏有幾點須要注意下。
當使用NDK來調試的時候,一個「服務端的」gdb和gdbcontext被ndk-build shell腳本塞到APk裏面去了。這個遠程的gdb調試器能夠與任何gdb兼容的客戶端進行通訊。
Eclipse裏面最好的gdb agent就是 NVidia debug manager plugin,可是安裝這個插件不在本教程的討論範圍以內。
注意: 若是你想安裝NVidia Debug Manager plugin,你首先到這個頁面下載完整的Tegra Android開發包,即使你可能如今並不須要它。而後,安裝Tegra Developer,它會提示你安裝哪些項,而後你能夠選擇NVidia Debug Manager plugin這個插件了。當你安裝完以後,它並無包插件安裝到eclipse裏面去,而是把zip文件放在你的硬盤的某個位置,你能夠參考這個pdf文檔來進行安裝。
我發如今一些物理設備(好比Samsumg Galaxy S),remote debugger總是啓動不了,可是使用AVD就能夠正常啓動。
爲了啓動一個debug會話,你能夠選擇你的項目,而後右擊Debug As Android NDK application,以下圖所示:
請注意,只有你安裝了NVidia debug manager plugin,你纔會在右擊的時候看到Android NDK Application這個選項。
你能夠在一行代碼上面雙擊來設置一個斷點,以下所示:
當斷點到達的時候,它將會停留在斷點所在行:
悲催的是,使用gdb來調試android有時候並無論用,因此,你可能須要添加一些額外的tracing系統。想知道更多的信息,請聯繫我,我將與你們分享這些tips。
何去何從?
恭喜你,你如今可使用cocos2d-x來開發iphone和android下面的遊戲了。
請耐心等待個人第二篇教程吧,它將帶你一塊兒開發一個跨平臺的太空射擊遊戲,固然是使用cocos2d-x啦!
原文連接:
http://blog.csdn.net/lwuit/article/details/7863948