利用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,lua,js}, --language {cpp,lua,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'。