Cocos2dx 4.0 编译新手教程(Win32,Android)

前言

由于4.0使用cmake来构建,所以开始前先确保已安装,同时python版本需要为2.x,本人推荐2.7.x系列。
这是我的测试环境:

  • win10 64位
  • python 2.7.14
  • cmake 3.17.1
  • vs2019
  • Android Studio 3.6.2

项目创建

执行cocos2d-x-4.0源码里的setup.py的脚本后,即可使用cocos new命令行来创建一个新项目。具体参考:cocos命令

windows平台

官方误导

cocos camke指南里,对于win平台测试是这样写的:

cd cocos2d-x

mkdir win32-build && cd win32-build

cmake … -G"Visual Studio 15 2017"

如果你这样做,创建出来的项目为64位目标程序,这与官方提供的一系列预编译库是冲突的,官方提供的预编译库为32位。使用vs编译会得到这样的提示:

“模块计算机类型“x64”与目标计算机类型“X86”冲突解决方案

笔者尝试将输出将输出结果修改为x86也无法通过编译。冲突相关库为cocos external路径下提供的预编译库。如:

cocos2d-x/external/Box2D/prebuilt/win32/debug/libbox2d.lib

一个猜想,如果能把这些预编译库换成64位,估计也能编译通过。

正确创建姿势

使用camke生成32位的项目,同时根据你的vs版本,选择不同的编译器。使用下列命令,查看cmake支持的编译器版本。

cmake -G

确定好你的版本后,再选择你要放.sln文件的路径,建议直接放在proj.win32下。命令如下

cd /d 你想要放的文件夹,可以用鼠标拖拽

cmake … -G"编译器" -A win32

比如我的版本为vs2019,那么我的命令则为:

cmake … -G"Visual Studio 16 2019" -A win32

执行完后,就可以在文件里看到一个.sln后缀的解决方案,打开即可。

关于windows下无论debug模式还是release都会打开调试输出问题

这是由于在main.cpp文件里定义了USE_WIN32_CONSOLE宏。代码引用:

//uncomment below line, open debug console

#define USE_WIN32_CONSOLE

可以将#define这句注释掉,将USE_WIN32_CONSOLE宏配置在项目属性页的预处理下的预处理宏定义里。这样debug和release就可以区别对待了。

关于res和src路径问题

在使用vs启动程序的时候,vs执行了两个生成事件,自动将项目的src和res文件夹拷贝到exe所在目录的Resource目录下了。如果不想要,可以卸载项目解决方案utils目录下的两个子模块:

COPY_LUA-XXXXXX

SYNC_RESOURCE-XXXX

右键卸载项目即可,这样就不会拷贝了。一般来说开发环境,想要的结果是exe执行自己所在目录或者上一级目录的src代码(方便emmy_lua等插件调试)。这里需要修改CCFileUtils-win32.cpp里的代码:
``

    bool FileUtilsWin32::init()
{
    DECLARE_GUARD;
    _checkPath();//初始化s_resourcePath为exe所在目录
    //_defaultResRootPath = s_resourcePath + "Resources/";//这一行注释掉
    _defaultResRootPath = s_resourcePath;//直接初始化为exe所在目录,如需上一级,自行修改字符串结果
    return FileUtils::init();
}

``

Android平台编译

使用Android Stuido打开proj.ios_mac文件夹,在gradle.properties文件里,添加cmake编译选项。

PROP_BUILD_TYPE=cmake

打开SDKManager,在SDK Tools列表里勾选如下几项:

LLDB

Android SDK Command-line tools

NDK

Android SDK Tools

Android SDK Platform-tools

当然还需要勾选cmake,但是这里cmake版本需要特殊选择,需要打开界面右下角的“Show Package Detail”选项,这样就能看到cmake的子版本,而不是下载cmake的最新版。展开以后,cmake的可选版本为:

3.18.1

3.10.2.xxx

3.6.xxx


这里选择3.10.2.xxx的版本即可。同时SDK Platform里勾选一个sdk库。即可完成编译。
如果出现下列错误:

CMake Error: CMake was unable to find a build program corresponding to “Ninja”. CMAKE_MAKE_PROGRAM is not set. You probably need to select a different build tool.

请检查你的cmake版本,一定不要安装3.18.1这个版本,同时去sdk
所在文件夹:

sdk所在文件夹/cmake/你的camke版本/bin

找到以上路径后,将上述路径配置在windows的环境变量Path里。比如我的环境变量配置为:

F:\AndroidSDK\cmake\3.10.2.4988404\bin


配置后,重启电脑即可成功编译。

2赞

我还在用3.17,没打算升上去,升上去对我意义不大,反正是维护老项目,而且项目也不用webview,涉及到的拒审内容已做屏蔽处理

1赞

我也在3.17

谢谢你,我也做过类似的新手教程,希望有更多的新人不会夭折在学习的道路上

新手别踩2dx的坑了,用creator吧 :innocent:

楼主android的文件夹写错了,不是proj.ios_mac,应该是proj.android

谢谢指正。

有种你把项目发布到google,3.17就是个鸡鸡

????
如果要发布到google,我为什么不开新项目?
既然要开新项目,我为什么不用creator?
脑袋有坑吗?

站着说话不腰疼,当你大量修改了底层以及多年沉淀得代码,以及全部员工都是一门语言之后,轻易换掉得成本你可曾考虑。反正我们是被坑的只有无声的吐槽了

首先,我们没有大量修改底层,没那精力去搞这事,除非是处理绕不过去的bug
其次,所谓多年沉淀,换个思路就是画地为牢。以前我也遇到过,做外包的时候,最开始用的别人魔改的框架,然后底层有严重问题但是又没法去处理,老板拍板直接放弃了那套框架,花了三个月时间自己搭了一个框架,再加调试测试,前后差不多小半年没盈利,这事还是在外包业务最火的时候做的。
这种事,无非就是缺个愿意担责的人罢了。摆明没有后续的东西,要么自己能开出后续的路,要么就断腕换掉,别说什么船大不好调头,不调头那就自己闭眼往前冲呗

还有后面,因为担心cretor不稳定,所有1.x的时候我们没有去转,接着一拖再拖,小游戏的风就没上上去,再想转就没办法了,只能散了

google play跑得好好的啊
你受啥刺激了

我们准备整个谷歌包,结果3.17.2 arm64-v8a 打出的包,运行几秒必闪退,墙都被我脑袋撞了个洞,至今无解中,您有啥办法还请指点一二

说的是,我们就1代翻译了一个自己的游戏,由于过于庞大,那个引擎明显支撑不下去就放弃了

于是乎想放弃3.17.2,弄最新的4.0结果,也是遇到一堆坑

你这个问题,你确定4.0能处理到吗?

死马当活马医,不行就只能退回3.16去了,哪个版本我们还发布过

那为什么不在3.17的基础上对比3.16的去改呢。。。?

不好使,估计技术也不到家,吭哧半天搞不定,小团队耗不起

我记得当时最后一个版本好像是3.19吧?4.0只是因为不维护了,然后ios出了个uiwebview拒审的问题临时处理的版本,仅仅只是替换了webview的使用