Quick-Cocos2dx-Community 中 64 位 Luajit 使用說明
由 Benz 于 星期四, 2015-10-29 14:08 發(fā)表
在 3.6 中篮洁,我們加入了 Luajit 2.1 以支持 64 位 bytecode,并替換掉了原生lua。
由于android并沒有強(qiáng)制要求64位姨丈,Luajit在不用的平臺(tái)使用不同的位數(shù)支持。情況如下:
Android勒庄、Win32萍桌、Mac 繼續(xù)使用32位的jit。
iOS更新硬件來決定使用的jit位數(shù)度硝,5s以上設(shè)備使用64位jit肿轨,以下設(shè)備使用32位jit。
事實(shí)上每個(gè)平臺(tái)都需要獨(dú)立的luajit庫(kù)支撐蕊程,引擎提供的luajit包含了各個(gè)平臺(tái)的庫(kù)椒袍,游戲開發(fā)者可放心使用。
在大部分時(shí)候藻茂,你不需要感知Luajit的存在驹暑,依然像往常一樣正常使用 Player 來開發(fā)游戲。
以下兩個(gè)情況是你需要注意的:
使用 Xcode 的 iOS 模擬器來測(cè)試代碼辨赐。如果你選擇iPhone 5s或以上的模擬器优俘,那么你需要在 project 的 other linker flags 中增加以下參數(shù):
-pagezero_size 10000 -image_base 100000000
切記千萬別把-ObjC參數(shù)給刪掉 不然會(huì)閃退,因?yàn)殒溄硬坏給c相關(guān)的庫(kù)
最終是 -ObjC -pagezero_size 10000 -image_base 100000000
如下圖所示:
Xcode 的 iOS 模擬器
注意:iPhone 4s模擬器不需要設(shè)置掀序。
調(diào)試完成請(qǐng)去掉這個(gè)參數(shù)設(shè)置帆焕,否則AppStore上新檢查將不能通過, 會(huì)報(bào)錯(cuò)ITMS - 90209 Invalid Segment Alignment。
游戲發(fā)布的時(shí)候不恭,針對(duì)iOS你需要用 compile_scripts 分別生產(chǎn) 32 和 64 位的 bytecode包叶雹,并在游戲啟動(dòng)邏輯加入系統(tǒng)位數(shù)判斷财饥,以啟動(dòng)不同的包。
Quick comminuty 3.6中的compile_scripts已支持在Mac平臺(tái)生成iOS上可運(yùn)行的64位bytecode折晦。
新建的工程中的文件runtime-src/Classes/AppDelegate.cpp有示例代碼佑力,如下:
#if 0
// use luajit bytecode package
stack->setXXTEAKeyAndSign("2dxLua", "XXTEA");
if (sizeof(long) == 4) {
stack->loadChunksFromZIP("res/game.zip");
} else {
stack->loadChunksFromZIP("res/game64.zip");
}
stack->executeString("require 'main'");
#else
// use discrete files
engine->executeScriptFile("src/main.lua");
#endif
發(fā)布正式ipa或apk包的時(shí)候,請(qǐng)把#if 0修改為#if 1筋遭。
注:3.6中修改了stack->setXXTEAKeyAndSign接口打颤,因?yàn)閮蓚€(gè)長(zhǎng)度參數(shù)完全多余。
有關(guān) compile_scripts 的詳細(xì)使用說明漓滔,參考鏈接 Quick-Cocos2dx-Community 在發(fā)布時(shí)加密lua源文件