Cocos2d-x跨Android&iOS平台开发入门

本教程由泰然教程组出品
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,而后打开一个终端,并输入下面的命令:
   
  1. 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项目。可是,在运行脚本以前,咱们须要在脚本文件的顶部作一些修改:
   
  1. # 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:
命令行的输出大体以下:
   
  1. bash-$ ./create-android-project.sh
  2. Input package path. For example: org.cocos2dx.example
  3. org.jymc.samplecocos2dxandroid
  4. . . .
  5. Available Android targets:
  6. ----------
  7. . . .
  8. ----------
  9. id: 9 or "Google Inc.:Google APIs:15"
  10. Name: Google APIs
  11. Type: Add-On
  12. Vendor: Google Inc.
  13. Revision: 1
  14. Description: Android + Google APIs
  15. Based on Android 4.0.3 (API level 15)
  16. . . .
  17. input target id:
  18. 9
  19. input your project name:
  20. samplecocos2dxandroid
  21. Created project directory: /Users/jymen/development/cocos2dx/samplecocos2dxandroid
  22. . . .
  23. Added file /Users/jymen/development/cocos2dx/samplecocos2dxandroid/AndroidManifest.xml
  24. Added file /Users/jymen/development/cocos2dx/samplecocos2dxandroid/build.xml
  25. Added file /Users/jymen/development/cocos2dx/samplecocos2dxandroid/proguard.cfg
  26. bash-$
注意“Created project directory:”这一行是脚本文件最后输出来的,这个输出的路径也就是你的Andriod项目被建立好的路径。我这里指的是/Users/jymen/development/cocos2dx/samplecocos2dxandroid,如上图所示:
注意: 不要把项目从一个地方移动到另外一个地方。由于你若是随意移动,有些脚本文件能够跑不起来。
构建工程
这里有两个步骤来构建项目—-首先经过命令行脚本编译c++代码,而后经过ecipse来编译java代码。
为了编译c++代码,咱们须要切换到$PROJECT_HOME/android文件夹下面去,而后在终端里面输入下列命令:
   
  1. ./build_native.sh
你应该会看到下面相似的输出:
   
  1. Gdbserver : [arm-linux-androideabi-4.4.3] libs/armeabi/gdbserver
  2. Gdbsetup : libs/armeabi/gdb.setup
  3. Compile++ thumb : cocos2d libs/armeabi/libcocos2d.so
  4. Compile++ thumb : cocosdenshion libs/armeabi/libcocosdenshion.so
  5. Compile++ thumb : game_logic libs/armeabi/libgame_logic.so
  6. 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文本框中输入下面的命令:
   
  1. 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。
   
  1. $(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
标签: Cocos2d-x
分享到 
0
  0 |    0
相关文章
相关标签/搜索