2018年7月30日 星期一

Cocos2dx require

最近工作上遇到一個問題
公司目前使用的遊戲引擎是 Cocos2dx 2.2.6
別問我為啥不升級,這個牽扯到超多問題,沒辦法動

最近在建立一個小型的專案
專案中用到 Git 的 Submodule 引入別人寫的 Library
問題在別寫的 Lua Code 中有 require

當這個專案被其他人引入并執行時
原本 require 的位置變成了其他專案的根目錄了

執行的時候就會報錯,表示找不到 XXX module

原本我直覺使用 Cocos2dx 提供的 CCFileUtils
裡面有一個函數 addSearchPath
但是呼叫并傳入 search path 卻是沒有用的,還是會出錯

仔細看一下 Cocos2dx 底層的 C++
發現 Cocos2dx 有改寫 Lua 尋找檔案的方式,請見 Cocos2dxLuaLoader.cpp
它在找檔案的時候還是依靠 Lua 的 package.path(http://lua-users.org/wiki/PackagePath)
所以我一直呼叫 C++ 的 addSearchPath 是叫心酸的!!

最后修改的方法如下
local function addSearchPath(searchPath)
return string.format(
"%s;%s?.lua;%s?/init.lua",
package.path, searchPath, searchPath);
end
package.path = addSearchPath("Libs/");
這樣才解決我的問題
Cocos2dx 你還我 30 分鐘啊啊啊!

沒有留言:

張貼留言

Lua 5.1 __gc

__gc lua 5.2 開始有 __gc 這個元函數可以知道什麼時候被釋放掉 當 table 被回收時會呼叫這個函數 我們可以在這個函數中處理資源釋放等操作 不過 lua 5.1 中對於 table 并不支援,我們先看一下在 lua 5.2 中 這個 __gc 怎...