利用VS对Cocos进行编译,是一件比较痛苦的事情,但是如何提高编译速度呢?说下几种编译情况:
1 利用Cocos Studio创建C++工程
Cocos Studio是一个非常方便的创建Cocos项目工程的工具。
项目名称:你所创建的项目名称(最好不要使用中文)
项目路径:项目存放的位置(路径中不要存在中文)
引擎版本:也就是Cocos2d-x的版本
引擎语言:我们根据自己的需要选择需要的语言
编辑器:选上吧,方便我们对于场景的编辑
SDK接入:目前不需要用
接下来着重说下引擎类型,这里是提高编译速度的关键所在。
(1)预编译库
我们先创建一个试试,我创建了一个FromLib的Cocos项目;
先编译下,编译用时:30s
然后查看项目目录大小:245MB
修改一下文件,再进行编译,用时:25s
不修改文件,再编译下,用时:26s
再修改,再编译,用时:33s
1>------ 已启动生成: 项目: FromLib,配置: Debug Win32 ------
1> HelloWorldScene.cpp
1> 复制了 60 个文件
1> FromLib.vcxproj -> D:\Users\CZW\Documents\Cocos\CocosProjects\FromLib\proj.win32\Debug.win32\FromLib.exe
1> 复制了 0 个文件
========== 生成: 成功 1 个,失败 0 个,最新 0 个,跳过 0 个 ==========
大部分时间都花在复制那60个文件上面了。通过多次尝试,发现编译时间基本都维持在25~35s之间。
上面这些都是为什么呢?我们来看看这个项目的main.c
#include "main.h"
#include "AppDelegate.h"
#include "cocos2d.h"
USING_NS_CC;
#if _MSC_VER > 1800
#pragma comment(lib,"libcocos2d_2015.lib")
#pragma comment(lib,"libBox2d_2015.lib")
#pragma comment(lib,"libSpine_2015.lib")
#pragma comment(lib,"librecast_2015.lib")
#pragma comment(lib,"libbullet_2015.lib")
#else
#pragma comment(lib,"libcocos2d_2013.lib")
#pragma comment(lib,"libBox2d_2013.lib")
#pragma comment(lib,"libSpine_2013.lib")
#pragma comment(lib,"librecast_2013.lib")
#pragma comment(lib,"libbullet_2013.lib")
#endif
int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine,int nCmdShow)
{
UNREFERENCED_PARAMETER(hPrevInstance);
UNREFERENCED_PARAMETER(lpCmdLine);
// create the application instance
AppDelegate app;
return Application::getInstance()->run();
}
可以发现,他是通过每次调用系统库,来实现对源代码不必要的编译,但是这样每次编译度需要将这些库连接到exe文件上。他花费的时间基本都是固定的。
(2)源代码
下面选择源代码创建一个Hello的Cocos项目。
先编译下,额。。。。。,时间比较长,用时:8分钟
查看项目目录大小:好吧,4.59GB
修改一下文件,再编译下,用时:10s
不修改文件,编译下:2s
再修改文件,编译下,用时:8s
1>------ 已跳过生成: 项目: libBox2d,配置: Debug Win32 ------
1>没有为此解决方案配置选中要生成的项目
2>------ 已跳过生成: 项目: libSpine,配置: Debug Win32 ------
2>没有为此解决方案配置选中要生成的项目
3>------ 已跳过生成: 项目: libbullet,配置: Debug Win32 ------
3>没有为此解决方案配置选中要生成的项目
4>------ 已跳过生成: 项目: librecast,配置: Debug Win32 ------
4>没有为此解决方案配置选中要生成的项目
5>------ 已跳过生成: 项目: libcocos2d,配置: Debug Win32 ------
5>没有为此解决方案配置选中要生成的项目
6>------ 已启动生成: 项目: Hello,配置: Debug Win32 ------
6> HelloWorldScene.cpp
6> Hello.vcxproj -> D:\Users\CZW\Documents\Cocos\CocosProjects\Hello\proj.win32\Debug.win32\Hello.exe
6> 复制了 0 个文件
========== 生成: 成功 1 个,失败 0 个,最新 0 个,跳过 5 个 ==========
发现,其实利用源代码进行二次编译时,只是对被修改的文件进行编译,其他库文件则不用编译也不用复制。
OK!对上面一些参数做个对比:
引擎类型 | 首次编译用时 | 项目工程大小 | 二次修改编译用时 | 三次未修改编译用时 | 四次编译用时 |
---|---|---|---|---|---|
预编译库 | 30s | 245MB | 25s | 26s | 33s |
源代码 | 8min | 4.59GB | 10s | 2s | 8s |
通过上面对比,我们可以发现,虽然预编译库首次编译用时比较短,并且占用空间比较小。但是从后期开发时间的考虑,还是建议选择源代码比较好一点。
2 利用Cocos2d-x工具创建项目
该方法与上面的(2)一样。有些人不想装Cocos Studio了就可以利用这种方法就行创建项目。
(1)安装Python27
建议选择Python2.7x版本,高版本有些兼容问题。
(2)利用cocos创建工程
启动dos窗口,输入命令:cd cocos2d-x-3.10\tools\cocos2d-console\bin
进入cocos2d-x-3.10\tools\cocos2d-console\bin中;先来Cocos命令怎么用
C:\cocos2d-x-3.10\tools\cocos2d-console\bin>cocos -h
C:\cocos2d-x-3.10\tools\cocos2d-console\bin\/cocos.py 2.1 - cocos console: cocos2d-x 的命令行工具集。
可用的命令:
run 在设备或者模拟器上编译,部署和运行工程。
gen-libs 生成引擎的预编译库。生成的库文件会保存在引擎根目录的 'prebuilt' 文件夹。
luacompile 对 lua 文件进行加密和编译为字节码的处理。
gui shows the GUI
deploy 编译并在设备或模拟器上部署工程。
package 管理 cocos 中的 package。
compile 编译并打包工程。
framework 管理工程使用的 frameworks。
gen-simulator 生成 Cocos 模拟器。
new 创建一个新的工程。
jscompile 对 js 文件进行加密和压缩处理。
gen-templates 生成用于 Cocos Framework 环境的模板。
可用的参数:
-h,--help 显示帮助信息。
-v,--version 显示命令行工具的版本号。
--ol ['en','zh','zh_tr'] 指定输出信息的语言。 示例: cocos new --help cocos run --help
我们需要创建工程,再看cocos new –help
C:\Cocos\Cocos2d-x\cocos2d-x-3.10\tools\cocos2d-console\bin>cocos new --help
usage: cocos new [-h] [-p PACKAGE_NAME] [-d DIRECTORY] [-t TEMPLATE_NAME]
[--ios-bundleid IOS_BUNDLEID] [--mac-bundleid MAC_BUNDLEID]
[-e ENGINE_PATH] [--portrait] [--no-native]
(-l {cpp,lua,js} | --list-templates | -k TEMPLATE_NAME)
[PROJECT_NAME]
创建一个新的工程。
positional arguments:
PROJECT_NAME 设置工程名称。
optional arguments:
-h,--help show this help message and exit
-p PACKAGE_NAME,--package PACKAGE_NAME
设置工程的包名。
-d DIRECTORY,--directory DIRECTORY
设置工程存放路径。
-t TEMPLATE_NAME,--template TEMPLATE_NAME
设置使用的模板名称。
--ios-bundleid IOS_BUNDLEID
设置工程的 iOS Bundle ID。
--mac-bundleid MAC_BUNDLEID
设置工程的 Mac Bundle ID。
-e ENGINE_PATH,--engine-path ENGINE_PATH
设置引擎路径。
--portrait 设置工程为竖屏。
-l {cpp,js},--language {cpp,js}
设置工程使用的编程语言,可选值:[cpp | lua | js]
--list-templates List available templates. To be used with --template
option.
-k TEMPLATE_NAME,--template-name TEMPLATE_NAME
Name of the template to be used to create the game. To
list available names,use --list-templates.
lua/js 工程可用参数:
--no-native 设置新建的工程不包含 C++ 代码与各平台工程。
OK,有了帮助文档,我们就可以创建工程了,根据帮助,我们需要执行下面的命令。
C:\cocos2d-x-3.10\tools\cocos2d-console\bin>cocos new HelloWorld -p com.helloworld.game -l cpp -d C:\CocosProject\
> 拷贝模板到 C:\CocosProject\HelloWorld
> 拷贝 cocos2d-x ...
> 替换文件名中的工程名称,'HelloCpp' 替换为 'HelloWorld'。
> 替换文件中的工程名称,'HelloCpp' 替换为 'HelloWorld'。
> 替换工程的包名,'org.cocos2dx.hellocpp' 替换为 'com.helloworld.game'。
> 替换 Mac 工程的 Bundle ID,'org.cocos2dx.hellocpp' 替换为 'com.helloworld.game'。
> 替换 iOS 工程的 Bundle ID,'org.cocos2dx.hellocpp' 替换为 'com.helloworld.game'。