本文主要介紹mac上,如何將自訂的c++類,綁定到lua。
1、工具先行
找到 你的cocos2d-x/tools/tolua++,裡面檔案按類型大致分為:
(1)*.pkg:用於定義要綁定的c++類,暴露哪些介面。
(2)*.lua:用於定義產生的lua繫結檔案,都使用哪些轉換規則。
(3)*.sh:使用tolua++,根據.lua中的規則,將.pkg中定義的類,輸出為包含綁定介面的.cpp檔案。
(4)README檔案,這個比較重要,涉及到pkg檔案要使用的具體規則。
2、pkg
(1)通常為項目定義一個總的pkg檔案,裡麵包含項目中具體使用的class的pkg檔案。即 test_project.pkg:
1 $pfile "class_A.pkg" 2 $pfile "class_B.pkg"View Code
1 2) remove CC_DLL for the class defines, 3 4 5 6 7) remove memeber functions that declared as private or protectedView Code
大體一看就懂,簡單翻譯如下:
1 2 3 4 5 6 7)去掉限定為private或protected的方法View Code
比如,class_A.pkg:
static std::string test1(const char *name) void test2() }View Code
3、lua
這個可以參考basic.lua或basic_cocostudio.lua,可以直接複製一份,改名為test_project.lua。解釋一下需要關注的部分:
(1)CCObjectTypes 是一個放置要綁定的類型名稱的數組
local CCObjectTypes = "class_A", "class_B", }View Code
(2)下面很長一段,都是關於綁定介面檔案,自動產生的規則,我們主要關注 #include 這部分即可。
replace( #include "stdlib.h" #include "string.h" #include "tolua++.h"]], extern "C" #include "tolua_fix.h" #include "class_A.h" #include "class_B.h" ]])View Code
4、sh
可以直接複製一份basic.sh,然後修改對應的檔案名稱:.lua、.cpp、.h、.pkg
# Invoked build.xml, SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE}")" TOLUA= if TOLUA=`which tolua++5.1 if echo "Unable to find tolua++ (or tolua++5.1) in your PATH." exit 1 test_project.pkgView Code
簡單解釋各個參數的含義:
•/tolua++ :lua綁定工具•-L:lua檔案(.lua)•-o:組建檔案(.cpp)•-H:產生標頭檔(.h)•最後,使用的pkg檔案 如果,指令碼運行時,提示“環境裡無法找到 tolua++”。可以將 ${TOLUA} 直接寫成 ./tolua++ 小結: 為了不與cocos2d-x內建的內容發生混淆,在 你的cocos2d-x/tools/tolua++/ 路徑下,建立目錄“你的項目名稱”,然後按上面的方法,配置好 pkg,lua,sh的內容。運行sh即可。 下面是我改的一個指令碼,tolua++運行後,會開啟產生的綁定代碼檔案所在路徑。 # Invoked build.xml, SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE}")" open ../../../scripting/lua/cocos2dx_supportView Code 綁定好的cpp檔案,如何在工程中使用,參考:cocos2dx-lua綁定自訂c++類(二)