当把游戏在
win32
平台上面实现之后,接下来我们就要把它移植到移动平台上去运行一下。在这里我选用
android
平台,毕竟
ios
的环境搭建还是需要一些
money
。在移植之前,我们首先需要去准备一下环境。这个网上教程一大堆,而且图文并茂,这里就不啰嗦了。
由于
cocos2d-x
本来就是跨平台的,所以已经设置好模版给我们用了,因此我们只要把模版需要的东西添加上去即可。这里包括源代码和资源文件等等。
下面我们进行移植的工作:
首先把
.h
和
.cpp
文件添加到同目录下的
Classes
中去,用记事本打开
proj.android\jni\Android.mk
文件,添加需要编译的文件,如下所示:
然后
打开
proj.android\
AndroidManifest.xml
文件,这里可以填写一些基本的配置信息,这里提一下经常会修改的两个地方。
这个用于设置该程序需要运行的最低版本。
还有一个经常会涉及到的,横竖屏的问题:
经过以上的基本步骤,来到了编译这一重点了。编译的方式有两种,一种是通过命令行,一种是经过
eclipse
。
命令行的方式需要配置好
cywin
,在终端打开游戏目录下
proj.android
,运行
build_native.py
的脚本就可以进行编译生成程序所需的
.so
文件。这个我使用的时候还是没有问题的,当然前提是你的环境配置是对的。但是如果使用
cocos
run -p android--ap “
SDK
版本”的时候总是会卡到最后那个
adb
的命令中,查了网上的一些资料还是不行,但是在
proj,android
文件的
bin
文件中已经生成了一个
apk
文件,可以点击安装到手机上了。据说网上很多人都说3.0版本的android模版是有问题的。
在这里还是建议大家使用
eclipse
编译的方式,毕竟图形化界面方便一点,而且也容易发现错误。使用
File->new->project
,选择
Android->Android Project from Existing Code
,在对话框中选择项目的路径并选中
proj.android
打开。点中项目名称右键打开
Properties
,如下图:
默认是
API-10
,这个主要是在目录下的
project.properties
里面写了
target =
,若然需要其他
SDK
的版本进行编译,可以选择,当然你要先中
SDK Manager
中下载到所需的
SDK
版本。选择完
API
之后,拉下可以看到如下所示
:
这个需要导入
cocos2d-x
用于运行
android
程序所需的一个库文件。和上面导入项目文件一样,导入路径为“你的游戏目录
\
cocos2d\cocos\2d\platform\android
\java
”,导入后可以看见
这个
libcocos2dx
就是我们要添加的
library
。回到刚才的界面,完成添加工作,最后有:
这个时候可以选中游戏项目点击
Project-> buildproject
,会调用
build_native.py
来进行游戏的编译,这个一般是没有什么大问题的。
编译完后我选择的是
run as androidproject
,然后会提示是否建模拟器,由于模拟器启动太慢,我是直接插入真机去测试的。安装成功后,可以查看输出条栏的
LogCat
,悲剧,没有成功。提示的错误是没有读取到资源。另外这里推荐大家遇到错误的时候可以使用
ndk-stack
来进行跟踪堆栈,会把
堆栈出错在那一句代码的行号给标出来,方便改错。先到解压
NDK
的文件夹下找到
ndk-stack.exe
,执行命令:
ndk-stack -sym “
生成的
.so
文件
”
,具体的可以上网查看教程。根据错误提示很快可以找到原因。我就是按照这个步骤很快就定位到读取资源的问题上面,最后还是顺利解决了。
最后打开运行,发现里面的资源没有对齐,其实就是程序没有进行屏幕适配,这个事情
cocos2d-x
已经为我们提供好服务了,只需要打开文件
AppDelegate.cpp
,在函数体
AppDelegate::applicationDidFinishLaunching()
中初始话
glview
的时候添加
<span style="font-size:18px;">glview->setDesignResolutionSize(yourWidth, yourHeight, ResolutionPolicy::SHOW_ALL);</span>
重新编译运行到手机上就
OK
了,但是又发现一个问题,就是没有声音,明明在
win32
上面声音是正常的。网上查了一下,原来
3.0
的
android
如果你通过继承
SimpleAudioEngine
类来另外实现一个声音管理类的话,是没有声音的。直接调用
SimpleAudioEngine::getInstance()->playEffect
才可以,至于为什么,我也不知道。改了一下播放声效的代码,重新编译跑一下,OK。
到这里,就成功把
win32
的项目移植到
android
平台上面了。中间也是遇到很多小问题的,当然最后都还是在网络上几位热心的网友的帮助下解决了。在此表示感谢。本文分享一下过程中需要注意的几个步骤,希望可以帮助到有需要的人。