现在的位置: 首页 > 移动开发 > 正文

cocos2d-x 3.0 win32项目移植到android平台

2019年09月06日 移动开发 ⁄ 共 2115字 ⁄ 字号 评论关闭

    当把游戏在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.0android如果你通过继承SimpleAudioEngine类来另外实现一个声音管理类的话,是没有声音的。直接调用SimpleAudioEngine::getInstance()->playEffect才可以,至于为什么,我也不知道。改了一下播放声效的代码,重新编译跑一下,OK。

    到这里,就成功把win32的项目移植到android平台上面了。中间也是遇到很多小问题的,当然最后都还是在网络上几位热心的网友的帮助下解决了。在此表示感谢。本文分享一下过程中需要注意的几个步骤,希望可以帮助到有需要的人。

【上篇】
【下篇】

抱歉!评论已关闭.