本文主要介紹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 1 $pfile "class_A.pkg"2 2 $pfile "class_B.pkg"
(2)具體每個class文件,遵循README。看看內容:

1 1) enum keeps the same2 2) remove CC_DLL for the class defines, pay attention to multi inherites3 3) remove inline keyWord for declaration and implementation4 4) remove public protect and private5 5) remove the decalration of class member variable6 6) keep static keyword7 7) remove memeber functions that declared as private or protected
大體一看就懂,簡單翻譯如下:

1 1)枚舉不變2 2)去掉類定義中的 CC_DLL ,注意多繼承(?)3 3)去掉聲明和實現中的 inline 關鍵字4 4)去掉public、protected、private關鍵字5 5)去掉類成員變量的聲明6 6)保留static關鍵字7 7)去掉限定為private或protected的方法
比如,class_A.pkg:

1 class class_A : public cocos2d::CCObject 2 { 3 /** 這是一個關于綁定c++到lua的例子1 4 * 5 */ 6 static std::string test1(const char *name); 7 8 /** 這是一個關于綁定c++到lua的例子2 9 *10 */11 void test2();12 };
3、lua
這個可以參考basic.lua或basic_cocostudio.lua,可以直接復制一份,改名為test_project.lua。解釋一下需要關注的部分:
(1)CCObjectTypes 是一個放置要綁定的類型名稱的數組

1 local CCObjectTypes = {2 "class_A",3 "class_B",4 }
(2)下面很長一段,都是關于綁定接口文件,自動生成的規則,我們主要關注 #include 這部分即可。

1 replace([[#ifndef __cplusplus 2 #include "stdlib.h" 3 #endif 4 #include "string.h" 5 6 #include "tolua++.h"]], 7 [[ 8 9 extern "C" {10 #include "tolua_fix.h"11 }12 13 #include <map>14 #include <string>15 16 #include "class_A.h"17 #include "class_B.h"18 ]])
4、sh
可以直接復制一份basic.sh,然后修改對應的文件名稱:.lua、.cpp、.h、.pkg

1 #!/bin/bash 2 # 3 # Invoked build.xml, overriding the lolua++ property 4 5 SCR[0]}")" && pwd) 6 TOLUA=`which tolua++` 7 if [ -z "${TOLUA}" ]; then 8 TOLUA=`which tolua++5.1` 9 fi10 11 if [ -z "${TOLUA}" ]; then12 echo "Unable to find tolua++ (or tolua++5.1) in your PATH."13 exit 114 fi15 16 cd ${SCRIPT_DIR}17 ${TOLUA} -L test_project.lua -o ../../scripting/lua/cocos2dx_support/LuaTestProject.cpp -H ../../scripting/lua/cocos2dx_support/LuaTestProject.h 18 test_project.pkg
簡單解釋各個參數的含義:

1 #!/bin/bash2 #3 # Invoked build.xml, overriding the lolua++ property4 5 SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)6 echo ${SCRIPT_DIR}7 cd ${SCRIPT_DIR}8 ../tolua++ -L test.lua -o ../../../scripting/lua/cocos2dx_support/LuaTest.cpp -H ../../../scripting/lua/cocos2dx_support/LuaTest.h test.pkg9 open ../../../scripting/lua/cocos2dx_support
|
新聞熱點
疑難解答