当我们在学习游戏开发的时候可能都会想我能否用Cocos2d-x开发一个Android应用呢?那么有了想法我们还在等什么?说干就干。下面本篇教程将将为你讲解如何用Cocos2D-X制作的一个Android应用。
想必大家都知道,在android上折腾cocos2d-x是比较复杂的,因为你需要用到jni技术,而且还需要通过配置Eclipse来合并java和C++代码,而在你的Xcode上为你的iOS工程合并Objective C和C++是没有问题的。
与Cocos2d-x和Android相关的教程,绝大部分都是解释如何编译并运行一个纯Cococs2d-x程序(如果兴趣可以参考Cocos2d-x Android tutorial,是Jean-Yves Mengant写的)。
在本文中,你将会学到如何在你的java版的Android应用中加载不同的Cocos2d-x acttivities。
我用到的是Cocos2d-x v1,但是我猜Cocos2d-x v2差别也不会太大。
我是在MacOSX上实践的,但是对于特定的操作系统上只有很少的东西要注意,所以对于其他操作系统也是一样的。
1.你有一个android(java)工程。在你应用中有一些activities,你想使用Cocos2d-x引擎。
2.下载 sample project SkeletonCocos2dxApp.zip。在本教程中会从这里复制一些文件。但是你也可以打开它,运行它,甚至查看源码学习,快速了解它是怎么工作的。我还没有测试过,但是你需要在编译同样的工程之前先配置好Eclicpse的C++环境。
3.对于本教程,你不需要下载最新的Cocos2d-x,因为它已经包含在了本工程中(我是使用的是Cocos2d-X v1/Opengl 1.1)。当你学会了如何讲Cocos2d-x整合到java工程的时候,你可以很容易将cocos2d-x源文件更新为最新的版本。
下面快速概要一下cocos2d新增的修改:
-官方的HelloWorld例子中的org.cocos2dx.libs包被修改成可以接受activity中的“BACK"按键事件,并且可以自定义activity中的启动CCScene。
-AppDelegate.cpp被修改成允许自定义启动CCScene。
4.下载最新的Android NDK。Cocos2d-x是由C++实现的,NDK的任务就是将C++和java整合到Android应用中去。
5.解压NDK,将其放任意位置,不过将其放置到android sdk同一个目录是不错的选择。
6.现在开始修改android工程。将helloworld和helloworldBis Cocos2d-x acitivity添加到工程中。一旦你理解了起工作原理,那么你就可以很容易修改这些activity。
7.像图片,纹理,声音等文件,必须将其添加到工程的”assets“目录中。
8.将”org.cocos2dx.lib"添加到工程中。
9.同样的,将“org.cocos2dx.helloworld"添加到工程中,此时这里有两个Cocos2d-x activity,你可以在以后修改他们的名字。
10.修改mainfest.xml来声明两个activity。
11.从相同的工程中,将”jni"复制到你的android工程中。“cocos2dx"和”CocosDenshion"是从官方Cocos2d-x包中复制来的C++源文件。“Classes”包含了Cocos2d-x的CCNodes和游戏的逻辑。“main/main.cpp"中包含了JNI方法,这些方法由Cocos2d-x activity调用,用来定义启动那个CCScene。
12.什么是JNI?JNI是Java Native Interface的缩写,这是一个Java特性,并不是android特有的。在本教程中你不必知道太多相关知识,但是如果你特别想了解的话,我们就来简单说一下:
JNI是Java Native Interface的缩写,它提供了若干的API实现了Java和其他语言的通信(主要是C&C++)。从Java1.1开始,JNI标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI一开始是为了本地已编译语言,尤其是C和C++而设计的,但是它并不妨碍你使用其他编程语言,只要调用约定受支持就可以了。使用java与本地已编译的代码交互,通常会丧失平台可移植性。但是,有些情况下这样做是可以接受的,甚至是必须的。例如,使用一些旧的库,与硬件、操作系统进行交互,或者为了提高程序的性能。JNI标准至少要保证本地代码能工作在任何Java 虚拟机环境下。
接下来我们将演示怎么使用Jni,一起来看下面的步骤吧。
13.在你的应用中已经有一个HelloWorld的例子,如果你想创建一个适合你自己的Cocos2d-x activity,你可以这样做:
-创建Cocos2dxActivity java类,复制Cocos2dHelloWorld.java是一个好方法。在这里我们在com.myconpany包中创建了一个Cocos2dxJisawPuzzle.java。
-在”jni/main/main.cpp"文件中添加如下JNI方法:
void Java_com_mycompany_Cocos2dxJigsawPuzzle_nativeInit(JNIEnv* env,jobjectthiz,jint w,jint h)
{
.......
}.
-注意,默认的参数只有我们要创建的OpenGL surface的宽度和高度,但是你可以在JNI中使用更多的参数,例如:
void Java_com_mycompany_Cocos2dxjigsawPuzzle_nativeInit(JNIEnv* env,jobectthiz,jint w,jint h,jint columnsCount,jint rowsCount)
{
''''''
}.
-在“jni/main/main.cpp"文件中添加如下方法:
void Java_com_mycompany_Cocos2dxJiagsawPuzzle_nativeEnd(JNIEnv* env,jobectthiz)
{
CCDirector::shareDirector()->end();
}。
此方法是在玩家按下"back"键时关闭Cocos2d-x的运行环境。
14.在工程的某个地方加载Cocos2d-x activity(例如按下一个按钮时):
Intent intent=new Intent();
Intent.setClass(SkeletonActivity.this,Cocos2dHelloWorld.class);
SkeletonActivity.this.startActivity(intent);
15.至此,工程的修改已经完成了!现在编译所有这些文件。
16.从相同的工程中复制build_native.sh文件。编辑并设置正确的值。对于NDK_BOOT,填入你解压NDK的目录即可。APP_ANDROID_ROOT中填入你的android工程目录。
17.现在我们需要在eclipse中编译他们。
18.如果还没准备好,那么需要给eclipse安装c++环境。在eclipse的help/install new software中安装CDT C++插件即可。如果不太清楚的话,请参考:setting up eclipse for cocos2d-x development这篇文章。
19.现在我们需要将工程转换成C++工程。右键工程选择new/other。然后选择c/c++工程,选择C++/makefile project/other toolchain,最后完成。
20.现在我们需要告知eclipse去运行我们的build_native.sh makefile。右键工程选择属性,选择c/c++ build,不要勾选use default build command,然后在Build command中输入bash${workspace_loc:/SkeletonAPP}/build_native.sh NDK_DEBUG=0 V=1。
21.现在我们需要在eclipse中修改C++编译中产生的一些错误。右键工程选择属性。选择c/c++ general,path and syb=mbols,GNU C++。然后按add...将目录添加到如下路径中。
/Library/Android/android-ndk-r8/sources/cxx-stl/gnu-libstdc++/include /Library/Android/android-ndk-r8/platforms/android-8/arch-arm/usr/include /Library/Android/android-ndk-r8/sources/cxx-stl/system/include /Library/Android/android-ndk-r8/sources/cxx-stl/gabi++/include
22.eclipse对C++并不太友好。所以我们需要注意一些警告和错误。还是在工程属性中,选择c/c++General/Code Analysis并且不勾选任何下拉选项。
23.现在我们基本上已经完成了。运行工程应该是行的。实际上第一次当然不会成功,但是你是一个开发者哦。
小结:
好了,本篇教程到这里就结束了,假如你还有不懂的地方,可以到我们的视频站去学习相关的视频,里面的知识点讲解更为简单明了哦~
下一篇:制作游戏教程 游戏制作实例
¥108.00
¥66.00
¥118.00
¥299.00