【Cocos2d-x】Cocos2d-x 开发环境

Cocos2d-x 本身的环境搭建很简单,但其需要的基础环境就略显复杂,包括安卓开发相关的环境、Python 环境、C++ 开发环境等。

安装 Android

基础环境

Java(JDK)

Java Development Kit:Java 开发工具包。

环境变量:

1
2
3
set JAVA_HOME = D:\Android\jdk8
set CLASSPATH = .;%JAVA_HOME%\lib
set Path = %Path%;D:\Android\jdk8\bin

Android(SDK)

Android Sofeware Development Kit:Android 软件开发工具包。

环境变量:

1
set ANDROID_SDK_ROOT = D:\Android\SDK

原生编译环境

C++ to Java(NDK)

Native Development Kit:原生开发工具包。

环境变量:

1
set ANDROID_NDK_ROOT = D:\Android\android-ndk-r10e

编译打包

两种打包工具,antgradle,ant 比较早期,eclipse 使用;gradle 是目前主流的 android 打包工具,android studio 使用。

Gradle

这是 Gradle 的 官方文档 以及一篇 参考教程

一个 Gradle 框架的 multi-project 结构如下:

1
2
3
4
5
6
7
8
9
10
11
12
project
├── project1(app)
│ ├── build.gradle #构建脚本
├── project2(module1)
│ ├── build.gradle #构建脚本
├── gradle
│ └── wrapper #gradle包装
├── build.gradle #工程构建脚本
├── gradlew #gradle wrapper linux shell脚本
├── gradlew.bat #gradle wrapper windows bat脚本
|—— settings.gradle #工程配置
|__ gradle.properties #本地配置

这里的 project 对应 Android Studio 项目中的 moudle,进一步对应到 cocos2dx 的工程,app 即为工程主模块,module1 即为 libcocos2dx,一个 cocos2dx 项目在 Android Studio 中的基本项目结构如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
proj.gradle
|—— projandroid
│ ├── build.gradle
| |—— src
├── libcocos2dx
│ ├── build.gradle
| |—— src
├── gradle
│ └── wrapper
├── build.gradle
├── gradlew
├── gradlew.bat
|—— settings.gradle
|__ local.properties

src 目录为源文件目录,包括 java 源代码 java、android 工程资源 res、资源目录 assets(游戏的全部内容包括 lua 代码,资源、音效全放这里)、依赖的库文件 jniLibs 等等,结构如下:

1
2
3
4
5
6
src
|—— main
│ ├── java
│ ├── res
│ ├── assets
│ ├── jniLibs

除了 src 目录,最重要的就是 gradle 打包需要的脚本文件 build.gradle 及相关的配置文件,每一个 module 都有一个 build.grade,主工程也需要一个 build.grade

主工程的 build.grade 定义了对所有 module 都生效的配置和动作,其中最重要的是定义了使用的 grade 工具版本。

1
2
3
dependencies {
classpath 'com.android.tools.build:gradle:3.5.0'
}

每个 module 各自定义自己的打包配置和动作,下面列几个主要的项。

1
2
apply plugin: 'com.android.application'
apply plugin: 'com.android.library'

这里配置了该模块的性质,application 表示是可运行的主模块,比如上面的 projandroidlibrary 表示不能独立运行的库,由其它模块包含使用,比如上面的 libcocos2dx

1
2
3
dependencies {
implementation project(path: ':libcocos2dx')
}

定义模块之间的依赖性,如 projandroid 依赖于 libcocos2dx,有了这层依赖关系,projandroid 生成的时候就会先生成 libcocos2dx,然后将其生成的文件作为一个库保存在其 src/main/jniLibs 下,然后一起打包进 apk 包。

settings.grade 定义了该工程包括的模块。

1
2
include ':libcocos2dx'
include ':projandroid'

local.properties 做一些本地配置,主要保存了 sdk 和 ndk 的路径。

1
2
ndk.dir=D\:\\Android\\android-ndk-r10e
sdk.dir=D\:\\Android\\SDK

Android Studio

安装 Android Studio。

安装 Visual Studio

没啥好说的,装就是了。建议安装 2015 版本或 2017 版本,2015 以下有点老了,2019 有点太新了,当然现在电脑配置高了,安装多个版本也是一个不错的选择。

安装 Python27

Python 要安装 2.x 的版本,安装完配置环境变量:

1
2
set PYTHON_BIN = C:\Python27\python.exe
set Path = %Path%;C:\Python27;C:\Python27\Scripts

安装 Cocos2d-x3.17

从官网下载最新版本的 Cocos2d-x3.17,解压之后运行 setup.py,这个脚本会自动检查环境变量并补全以下环境变量:

1
2
3
set COCOS_X_ROOT = D:\engine
set COCOS_CONSOLE_ROOT = D:\engine\cocos2d-x-3.17.2\tools\cocos2d-console\bin
set COCOS_TEMPLATES_ROOT = D:\engine\cocos2d-x-3.17.2\templates

引擎的目录结构:

1
2
3
4
5
6
7
8
9
|-cocos2d-x-3.17
|-build
|-docs
|-tests
|-templates
|-extensions
|-external
|-tools
|-cocos

源码在 cocos, extensions, external 这三个目录下,extensions 为一些扩展,external 主要是第三方库。tests 目录下有官方提供的例子,c++, lua, js 三种语言的例子都有,可打开运行看看。

创建工程的命令:

1
2
3
4
usage: cocos new [-h] [-p PACKAGE_NAME] [-d DIRECTORY] [-t TEMPLATE_NAME]
[--ios-bundleid IOS_BUNDLEID] [--mac-bundleid MAC_BUNDLEID]
[-e ENGINE_PATH] [--portrait] -l {cpp,lua,js}
[PROJECT_NAME]

打开命令行,输入 cocos new -p com.xxx.game.mygame -d d:/learn/cocos -l cpp mygame 即可创建一个 C++ 工程。

工程配置

创建的工程默认是不开控制台,打开 main.cpp,添加下面代码开启控制台。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int WINAPI _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
UNREFERENCED_PARAMETER(hPrevInstance);
UNREFERENCED_PARAMETER(lpCmdLine);

// add to open console
#ifdef USE_WIN32_CONSOLE
AllocConsole();
freopen("CONIN$", "r", stdin);
freopen("CONOUT$", "w", stdout);
freopen("CONOUT$", "w", stderr);
#endif

AppDelegate app;
return Application::getInstance()->run();
}

添加宏定义 USE_WIN_CONSOLE 即可开启控制台,去掉这个宏定义就关闭控制台。在代码中定义 #define USER_WIN_CONSOLE,或者在 项目属性->C/C++->预处理器->预处理器定义 中添加 USE_WIN32_CONSOLE

这是 C++ 工程的做法,Lua 工程也可以这么做,但有更好的做法,定义宏 #define SIMULATOR_WITH_CONSOLE_AND_MENU 1 即可,不仅可以开启控制台,还开启了菜单栏,可以在运行时改变分辨率以及按 F5 刷新。这个宏在 SimulatorWin.cpp 中定义,默认是定义为 0,把它改成 1 即可。