此篇文章是筆者網搜看到之blog文章,因講的是目前釋出版本之最新技術與概念,因極具參考價值故予節錄(刪除iOS部份,只保留Android講述內容),原文為E文,已轉譯為中文並稍作潤稿予以修飾(圖形則截錄原稿以保留初衷),若有意啃E文可參考下列網址:
筆者在譯文前想作的聲明與心得:初入學習cocos2d-x作遊戲引擎領域之程序員,常會因環境設置弄得有點心灰意冷(心浮氣躁),爬文看網路文章又像大海撈針一樣毫無頭緒(※此過程筆者是過來人),若無師父領進門,一時之間要”快速”學會某一專業領域何其困難,瓶頸重重讓很多有心無力的程序員打退堂鼓,此篇博文原作者講解過程非常清楚,圖文並茂可供對照外,最主要的是會補述一些概念以強化學習觀念(※筆者建議看文章一定要做到此點,融會貫通以打通任督二脈,以後發現問題自己才有解決方案之能力,否則效果有限),一般而言,筆者是不作翻譯這檔事(※非筆者本行專業),撰文此篇之動機是受某公司專案之委託訓練而寫的,期因筆者當初以此原博文作教案,受訓學員看了一個禮拜還擺不平系統,奢談後續作業,反彈超大的(*究其原因是看不慣E文,有看沒懂,抓不到重點),當然Y,筆者也被K叮了,想關我何事,學員E底不佳應不是我能力所及的,但退一步想當初筆者從前也是這樣懵懂亂做,從做中學發現問題至解決,一路自學不知走了多少冤枉路,以前沒網路可用,都是自行埋頭苦幹找資料問高手學經驗,現在網路四通八達隨處拈來即可使用,有問題時上網丟出等著檢現成(懶人作法),或Google網搜資料一個一個慢慢看(勤者作法),其實專業論壇最好用(高等作法之一),有人耕耘有人收穫,其次是技術博客也可加善用(高等作法之二),有人問寫博客之目的是要幹嘛,沒事找事做,能賺錢嗎?各說對了一半,經營blog主要可分享所學及經驗交流,藉由同好雙向溝通討論以促使自我鞭策之成長,再則提昇個人價值能力,以後錢就滾滾而來。扯遠離題了,切回至主題,目前技術之發行均是採全球化行銷,想獲取第一手最新資料當然得從官網著手,其它的都是衍生的旁枝末節技術,不是不能看,是要過濾消化的(※說真的有些人的技術文章連筆者都實作不出其結果),既是官網是主流且又是E文,那你接下來要如何做呢?不看(E文能力不好)便學不到技術重點,等別人消化完再看(※但想他一定會post文嗎?)沒有自我學習之動能及克服學習障礙是永遠學不到核心技術的(※筆者講到重點了,從頭到尾閒扯淡舖陳一些題外話,筆者最終就是要傳達這個訊息,懂了嗎?程式設計所學為何又如何學,該學到何境界?很多學問~~~~筆者不是通才,我只會回答我懂的~我會的~我知道的~至於其它,莫知奈~~~~~say sorry sorry………)。看完本譯文再去看原E文,可告知你的想法嗎,千莫留文:翻譯好爛,爛爆了~~~~~K人哦!!!!!
了解如何創建一個簡單的iPhoneAndroid遊戲的Cocos2D-X
此文適用於全面更新的Cocos2D-X 2.1iOS 6Android。原Cocos2D是一個驚人且易於使用的遊戲框架,但因為它是在Objective-C編寫的,你只可以寫遊戲限於iOSMac平台上,故那不是巨大的,如果你可以使用相同的且容易使用Cocos2D API,使之運行在Android嗎?如此便可以大大延長你的應用程序的市場,使得增加了很多額外的收入!此即為被提出之Cocos2D-X遊戲框架! Cocos2D-X是一個以C + +語言為基礎之Cocos2D API的端口,你可以使用這個API如你所知道和喜愛的,因為它是在C + +上,所以它可工作在許多平台上 ---iOSAndroidWindowsLinux和更多!
在此篇Cocos2D-X教程中,您將學習如何使用Cocos2D-XC + +來產生一個跨平台之“Hello World”應用範例程式,使之運行在iOSAndroid平台上。過幾天後,我會發布後續的Cocos2D-X教程,將告訴你一個實際遊戲的例子 ---一個跨平台的太空射擊遊戲!因此,拿起你的iPhoneAndroid設備,並讓我們開始吧! (※此射擊遊戲之開發是原文作者提出的,筆者也在研究中~)
你好,針對AndroidCocos2D-X
現在讓我們做一個在Android平台之“Hello World”Cocos2D-X範例教程,但是,您將需要通過命令行來做到這一點,因為此時刻尚沒有任何的Cocos2D-X專案模板可以通過Eclipse IDE。(你知道嗎,這將是可作為候選之一個偉大的開源專案,如果你有這樣的傾向:]
$ COCOS2DX_HOME目錄中包含一個shell腳本命名create_Android_project.sh,您可使用此檔案以產生Android專案。但是,在第一次啟動這個shell腳本,你需要於上述文件的頂部做一個微小的設定修訂:
#設置環境參數研究
NDK_ROOT_LOCAL =“/ home/laschweinski/android/android-ndk-r8d”
ANDROID_SDK_R​​OOT_LOCAL =“/ home/laschweinski/android/android-sdk-linux_86”
修改上述這些行使得NDK_ROOT_LOCAL指向你安裝的Android NDK$ NDKROOT)及ANDROID_SDK_ROOT_LOCAL為你安裝了Android SDK 所在的目錄。
現在可於命令行中運行create_Android_project.sh腳本,你會得到一些各種輸入值之提示,這些提示要求您提供以下信息:(註:此原文作者之平台為Linux,若為Windows平台可參考筆者post之環境建置文章,本篇主要是學習整體之概念)
1.       第一個提示會問你輸入包(package)的路徑,這是將用於產生java代碼的軟件包名稱,您可以使用反向域符號(類似於iOS bundle ID---com.yourdomain.samplecocos2dxandroid(記得以反向域名表示,並取代com.yourdomain為您的實際域名)
2.       接下來,你會得到一個可用的Andr​​oid API和它們的ID列表,此會根據你的機器上所安裝的,列表將有所不同,在這個階段的提示只是要求您的應用程式將支持的Andr​​oid API Level,如最後一個清單是一個谷歌API的列表,你可以設定使用此id數字。
3.       最後,您必須提供的專案名稱,如可稱為samplecocos2dxandroid
從上述過程中的命令行輸出將看起來像下面這樣:
bash-$ ./create-android-project.sh
Input package path. For example: org.cocos2dx.example
org.jymc.samplecocos2dxandroid
. . . 
Available Android targets:
----------
. . .
----------
id: 25 or "Google Inc.:Google APIs:17"
     Name: Google APIs
     Type: Add-On
     Vendor: Google Inc.
     Revision: 2
     Description: Android + Google APIs
     Based on Android 4.2.2 (API level 17)
. . .
input target id:
25
input your project name:
samplecocos2dxandroid
Created project directory: 
/Users/jymen/development/cocos2dx/samplecocos2dxandroid/proj.android
. . .
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-$ 
注意腳本輸出接近尾端所創建之專案目錄,這就是你的Android專案已經由腳本創建,專案位置(在上述例子為/Users/jymen/development/cocos2dx/samplecocos2dxandroid)從現在開始將被稱為$PROJECT_HOME
注意:不要試圖將專案從該位置移動到不同的位置,如果你這樣做,因至少會有一個腳本,致使你會在下一節將無法正常工作。
建立專案
Eclipse編譯Java代碼時有兩個執行步驟:建立專案及編譯C + +代碼之命令行腳本。但是,在編譯之前,你需要定義NDK_ROOT參數使其指向$ NDKROOT目錄,打開$ PROJECT_HOME / proj.android / build_native.sh shell腳本,並在該文件的頂部添加下面一行:
paths
NDK_ROOT =“/ home/laschweinski/android/android-ndk-r8d”
修改上述行NDK_ROOT變數指向你的Android NDK$ NDKROOT)安裝目錄。當要編譯C + +代碼,則通過命令行切換到$ PROJECT_HOME / proj.android目錄之目錄,並鍵入以下命令:
./ build_native.sh
注:如果在此時你所得到的消息為“please define NDK_ROOT”,則表示你必須確保已在上述步驟正確地指定到你的Android NDK根目錄。
由上面命令之輸出響應,你應該看到一些類似以下的輸出:
Gdbserver      : [arm-linux-androideabi-4.4.3] libs/armeabi/gdbserver
Gdbsetup       : libs/armeabi/gdb.setup
Compile++ thumb  : cocos2d <= CCConfiguration.cpp
Compile++ thumb  : cocos2d <= CCDrawingPrimitives.cpp
:
:
:
Compile++ thumb  : cocos2d <= CCTileMapAtlas.cpp
Compile++ thumb  : cocos2d <= CCTouchDispatcher.cpp
Compile++ thumb  : cocos2d <= CCTouchHandler.cpp
Prebuilt       : libstlport_static.a <= /sources/cxx-stl/stlport/libs/armeabi/
SharedLibrary  : libcocos2d.so
Install        : libcocos2d.so => libs/armeabi/libcocos2d.so
Compile++ thumb  : cocosdenshion <= SimpleAudioEngine.cpp
Compile++ thumb  : cocosdenshion <= SimpleAudioEngineJni.cpp
SharedLibrary  : libcocosdenshion.so
Install        : libcocosdenshion.so => libs/armeabi/libcocosdenshion.so
Compile++ thumb  : game_logic <= AppDelegate.cpp
Compile++ thumb  : game_logic <= HelloWorldScene.cpp
SharedLibrary  : libgame_logic.so
Install        : libgame_logic.so => libs/armeabi/libgame_logic.so
Compile++ thumb  : game <= main.cpp
SharedLibrary  : libgame.so
Install        : libgame.so => libs/armeabi/libgame.so
這將為您的專案生成C + +Cocos2D-X庫和C + +代碼。
您將創建一個Eclipse專案以構建Java代碼---這比通過命令行的方式更容易些:]
啟動Eclipse並在 File\New\Other. 下選擇Android\Android Project from Existing Code,並單擊 Next 。單擊 Browse ,選擇$ PROJECT_HOME / proj.android目錄,如下圖所示。
單擊 Finish,至此你現在有一個專案!
注意:預設情況下,Android的構建目標是2.2,但須改變它使用最新的版本。要做到這一點請從主功能表選擇Project\Properties,在左側列表中選擇Android,並選擇Android 4.2.2,且請確保您已配置了一個AVD 取名 4.2.2。如果您需要了解更多信息,可檢出Getting Started with Android Development 教程。
此時,該專案可能會有一些錯誤,但不要害怕,他們是很容易解決的:
產生的錯誤之一,因為Eclipse無法找到 “@drawable/icon”資源,在左邊展開專案樹狀結構,打開AndroidManifest.xml文件,並更改AndroidManifest.xml視窗為純文本模式,請看下面這行代碼:
<application android:label="@string/app_name"
android:icon="@drawable/icon">
將改變它為正確的圖標名稱:
<application android:label="@string/app_name"
android:icon="@drawable/ic_launcher">
在關閉AndroidManifest.xml文件之前,修改androidminSdkVersion為:
<uses-sdk android:minSdkVersion="14"/>
之後再儲存該文件。
產生之第二個錯誤是因為Eclipse不能找到一些Cocos2D-XJava類,從主功能表中選擇Project\Properties,在左邊的列表中選擇Java Build Path,並在 Source 標籤中,單擊Link SourceBrowse 到以下目錄
$ COCOS2DX_HOME/cocos2dx/platform/android/java/src /
此處$ COCOS2DX_HOME指的是安裝Cocos2D-X資源所在之目錄,在Folder name輸入cocos2dx-src,單擊 FinishOK完成。
目前該專案沒有錯誤了,很容易吧?
現在,您可以運行它,在左邊樹狀結構中右鍵單擊該專案,選擇 Run As\Android ApplicationAndroid虛擬設備(AVD)將顯示Cocos2D-X專案之Hello World結果(可能它不工作,請再繼續往下閱讀):
如果應用程式沒有在模擬器上顯示出預期果且 EclipseLogCat視窗顯示錯誤訊息java.lang.IllegalArgumentException: No config chosen,此是由於新的AVD設定中OpenGL ES 2.0的一個問題。為了解決這個問題,你必須採取兩個步驟:
1)進入到 Android Virtual Device Manager,選擇您使用之AVD項目,然後單擊Edit,然後確保Use Host GPU複選框被選中,如下圖所示:
2)現在打開samplecocos2dxandroid/cocos2dx-src/org.cocos2dx.lib/Cocos2dxActivity.java,尋找init()方法:
this.mGLSurfaceView.setEGLConfigChooser(8, 8, 8, 8, 16, 0);
之前添加:
this.mGLSurfaceView.setCocos2dxRenderer(new Cocos2dxRenderer());
現在嘗試再次運行它 ,期望這一次它應該工作。配置一個Android虛擬設備的更多細節,可檢出Getting Started with Android Development教程。恭喜,你現在有一個 “Hello World專案運行於Android
定義一個聯合Java / C + +專案在Eclipse
Eclipse中作編譯C + +代碼的命令行腳本和編譯Java代碼是很累贅的工作,在此這將變得容易得多,你僅僅使用Eclipse來構建一切工作。幸運的是,你可以做到這一點告訴您的Eclipse是合併Java / C + +跨語言的Andr​​oid專案!
要做到這一點,在左邊的樹狀結構中選擇samplecocos2dxandroid專案,然後從功能表選擇 File\New\Other,再從對話框選取C/C++\Convert to a C/C++ Project 項,如下圖所示:
單擊 Next,並在接下來的畫面中,勾選您的專案核取框,再選取C++ Project 選項,並指定專案類型為Makefile project\Other Toolchain項。
單擊 Finish完成,Eclipse可能會發生這種情況,問你是否想打開C / C + +透視視窗,只需點擊No關閉
下一步是要更改專案設置以指定如何運行make命令,在左側樹狀結構中,以右鍵單擊在samplecocos2dxandroid專案,選擇 Properties ,選擇C/C++ Build項。
取消選中 Use default build command”複選框,並在build command文本類型框中輸入:
bash ${workspace_loc:/samplecocos2dxandroid}/build_native.sh NDK_DEBUG=1 V=1
單擊 Apply,然後單擊OK完成。之後再從主功能表中選擇Project\Build All,你會看到C + +編譯運行於Eclipse控制台:
還有一些警告須來解決,要看出我表示的意義,開拓JNI / hellocpp / main.cpp,你會看到一堆警告:
這些發生的警告是因為你尚未正確地指定C + +程式之包含路徑,要做到這一點,在左邊的樹狀結構中,以右鍵單擊在samplecocos2dxandroid專案並選擇Properties\C/C++ General\Paths and Symbols\Includes\GNU C+項,再使用 Add 按鈕以增加如下圖所示這兩個目錄,然後單擊 Apply OK完成。
$NDKROOT/ platforms/android-14/arch-arm/usr/include
$COCOS2DX_HOME/ cocos2dx/include
注意:不要忘記將$NDKROOT)和 $COCOS2DX_HOME)替換為你安裝了這些在您的機器上的實際路徑。
單擊 Apply後你可能會被提示須重新構建索引,勇往直前地說 Yes ,然後單擊OK關閉對話框。現在,如果你看一下在main.cpp,你會看到大多數包含警告訊息已經消失:
然而, AppDelegate.h文件仍然不能被發現,這是因為AppDelegate.h文件位於$ PROJECT_HOME \ Classes下目錄,此目錄是非常重要的,因為它為您的專案包含可移植的C + +類,如HelloWorldScene.cpp作為您的專案起點。
當您創建Eclipse專案時,你必須選擇$ PROJECT_HOME \ proj.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 複選框,並browse 裡面$ PROJECT_HOME目錄中Classes 目錄,單擊OK,然後單擊 Apply OK
您現在應該能夠看到在您的文件樹Classes目錄,和#include “AppDelegate.h”預警應該已經消失在main.cpp中。
Eclipse在該專案中仍存有一些警告,但是這僅僅是因為Eclipse不是很強大地可解析C + + header文件的代碼分析型式,故要禁用此功能,來到專案屬性(右鍵單擊該專案,並從上下文功能表中選擇 Properties ),並關閉警告Code Analysis項,你可以看到下面的截圖:
最後單擊 Apply ,然後OK ----您已可在Eclipse中編輯和構建一個專案!:]
關於Java代碼是什麼?
如果你在Eclipse中看以上的專案內容,你會發現一些Java代碼在src gen 目錄,你可能不知道它有關之意義。Android開發的主要語言是Java,專案模板會創建一些Java腳架代碼給你,並在您的應用程式搭載所有繁重之C + +代碼,通常你不會去修改Java代碼,但讓我們來看看更詳細的主類--- src\com\xxx\samplecosos2dxandroid\samplecocos2dandroid.java ---看它是做什麼。這個類包含了應用程式Android啟動時需要控制之Activity類,它會先搭載請求NDK以生成C + +的動態庫:
由於這類自Cocos2dxActivity衍生,幕後的Cocos2D-X將會給予AppDelegate初始化方法以控制C + +程式,最後調用applicationDidFinishLAunching方法,依此重複,此類中只包含Java封裝代碼,故你很少需要會去改變它,因為所有遊戲的邏輯均被封裝在C + +代碼裡面。
結合iOSAndroid專案結構
你可有兩個的Cocos2D-X專案 ----一個分別用於iOSAndroid,你的目標是讓他們分享彼此相同的目錄,這樣就可以在這兩個專案中使用相同的C + +資料夾(在您的手攜式遊戲邏輯)。您在這兩個專案中,你有一個 包含此手攜式遊戲代碼名為Classes目錄,如下:(Android在左邊,iOS在右邊):
如果你仔細看,你會看到在EclipseXcodeclasses目錄,其C + +文件是完全一致的!因此,你需要做的是設置這兩個專案指向相同的目錄
要做到這一點,open Xcode之專案Cocos2DxFirstIosSample,並選擇Classes 類目錄,單擊 Delete ,然後於彈出視窗中選擇 Move to Trash。接下來,在Project Navigator右鍵單擊該專案,選擇New Group,重命名為新的Classes,右鍵點擊此Classes類,並選擇 Add Files ,從$ PROJECT_HOME \ Classes下目錄選擇下列文件,並確保在單擊 Add 之前未勾選Copy items into destination group’s folder複選框:
Xcode專案做Clean Build 檢查一切是正常的。
恭喜 - 一切都位處在你的Xcode / Eclipse合併iOS / Android專案已經準備好可使用!
當使用Xcode中,當使用Eclipse
現在,你有兩個專案文件,在使用它的時候可能不會立即有明顯區分,通常的發展策略是為iOS(通過Xcode中)開發和測試第一個Cocos2D-X專案,當你已經完成此作業,之後,再確保它的工作原理在第二個Android(通過Eclipse)是可行的,只要保持記住下面的規則:
1.       經常測試 (Test often) 測試在Android上的作品所開發的代碼,這樣你就不會太久才發現任何問題。
2.       在多個設備上測試(Test on multiple devices):大量的Android設備往往存在細微的差別,所以最好盡可能在你持有的多個設備上進行測試。
它也可以有一個相反的策略(首先用Eclipse開發Android專案),但我覺得這種方法缺少生產力,因為對我來說Xcode的感覺比使用Eclipse更快,更容易。另外,在Android模擬器通常需要很長的時間來啟動,所以當它涉及到調試時需要耗費更長的時間,反而在iOS模擬器啟動相當快。
調試技巧和竅門
調試iOSCocos2D-X專案與調試標準Cocos2D的代碼是完全一樣的,所以沒有什麼特別的可添加在這裡,然而,對Android,這裡有一些註記,當調試NDK時,一個 ‘server side’端之gdbgdbcontext會經由NDK腳本指令執行而填置至生產設備之APK裡面,此將可使得與任何相容GDB client agent之設備可作遠程調試,在Eclipse中最好使用GDB client agent NVidia debug manager plugin,但安裝使用已超出本Cocos2D-X教程範圍。
※※後序:翻譯本文(只針對適用於Windows平台之Android部份)筆者日也操,暝也操花了將近二天始完成,細胞又死一堆了(以後再也不幹這種X),看原文花1Hr,翻譯花2days,真沒效率,其實筆者有用翻譯軟體代操作,翻譯的結果看也看不懂,但頭洗了一半無法退身(※哦,不是退駕,又不是神明),只好硬頸咬牙含血吞埋頭實幹了(※唉,說得這麼嚴重,有那麼跨張嗎),不過說真的,培養E文能力很重要,台灣教育只教學生記文法背多分考高分,不會拿出來善用有何屁用(※這應不是筆者立場該說的話),功夫學一堆,碰到上場要打架群手飛舞都亂打,尤其碰到拿槍的又跑第一(※筆者好像也是這種人,俗言好人不跟惡人計較),會啃E文不是多高桿多厲害(※筆者不是強調此點,別會錯意),語言只是個溝通工具,可讓你快速學會某技術,若文章原始文是德文、日文…那學也學不完,但很多技術文章都是以E文發表的,所以我才說E文很重要,要下苦功才能學會的,也要找對方法才能事半功倍。To translate a papera lot of grumble. It’s not of my mind.

0 意見: