天天看點

使用cocos2d-x tolua++工具導出自定義類到lua腳本環境

本人學習cocos2d-x tolua++使用時,從網上搜到的相關學習資料大多數是介紹用tolua++工具将自定義類導出生成到cocos2d-x-2.2.3\scripting\lua\cocos2dx_support目錄下的LuaCocos2d.cpp源檔案裡,這樣做将會帶來日後更新cocos2d-x引擎帶來麻煩,是以本文介紹的是另一種導出方式,在不影響原生引擎的目錄下導出自定義類,具體步驟如下:

1.建立自己的自定義類

2.建立用來與lua互動的中間類(“.h“檔案由自己編寫“.cpp”檔案由tolua++工具生成)

3.建立自定義類的pkg檔案

4.建立用于生成中間類“.cpp”檔案的pkg檔案

5.建立批處理檔案,用于生成中間類“.cpp”

6.将我們的module注入到LuaScriptEngine裡

現在逐漸實作上面的步驟:

1.建立自己的自定義類

将這個類test2lua.h建立在自己建立的工程Classes目錄下,為了友善我就把定義跟實作寫在頭檔案裡了,如下代碼

#ifndef __TEST2LUA_H__
#define __TEST2LUA_H__

class CTest2Lua
{
public:
	CTest2Lua(int number)
		:_number(number)
	{}
	~CTest2Lua(){}
	void setNumber(int number){ _number = number; }
	int getNumber(){ return _number; }
private:
	int _number;
};

#endif // __TESTLUA_H__
           

2.建立用來與lua互動的中間類(“.h“檔案由自己編寫“.cpp”檔案由tolua++工具生成)

先建立一個用于生成的目錄“module”(名字随便取)該目錄可建在任意地方,我建在了與Classes檔案夾同級,然後在目錄下建立“LuaModule.h”檔案,代碼如下

#ifndef __LUAMODULE_H__
#define __LUAMODULE_H__

extern "C" {
#include "tolua++.h"
#include "tolua_fix.h"
}

#include "test2lua.h"//添加自定義類頭檔案

TOLUA_API int tolua_LuaModule_open(lua_State* tolua_S);//用于在AppDeletegate.cpp檔案下注冊</span>

#endif
           

3.建立自定義類的pkg檔案

在這裡要說明一下建立pkg檔案内容的規則,在cocos2d-x-2.2.3\tools\tolua++目錄下的README檔案已經有說明,内容如下

1) enum keeps the same //枚舉不變

2) remove CC_DLL for the class defines, pay attention to multi inherites //移除掉定義的類的CC_DLL宏(我們自定義的類其實沒有),注意多重繼承

3) remove inline keyword for declaration and implementation //移除inline關鍵字

4) remove public protect and private //移除public protect 和 private關鍵字

5) remove the decalration of class member variable //移除成員變量

6) keep static keyword //保留static關鍵字

7) remove memeber functions that declared as private or protected //移除掉保護和私有的成員函數

遵照上面7點規則我們将test2lua.h自定義類寫成pkg檔案,我們可以拷貝之前寫的内容到新建立的test2lua.pkg檔案裡,根據規則去整理内容後,如下代碼

class CTest2Lua
{
	CTest2Lua(int number);
	~CTest2Lua();
	void setNumber(int number);
	int getNumber();
};
           

4.建立用于生成中間類“.cpp”檔案的pkg檔案

在module目錄下建立LuaModule.pkg檔案,裡面内容如下

$#include "LuaModule.h"

$pfile "test2lua.pkg"
           

5.建立批處理檔案,用于生成中間類“.cpp”

建立批處理檔案為了友善,不用每次打開cmd控制台去敲指令,在build.bat檔案裡輸入tolua++ -o "LuaModule.cpp" LuaModule.pkg指令儲存即可,然後我們要到cocos2d-x-2.2.3\tools\tolua++目錄下拷貝一個檔案tolua++.exe(是從tolua++.rar解壓出來的)到module目錄下。之後我們輕按兩下build.bat檔案執行指令生成“LuaModule.cpp”中間類。到現在我們執行了以上步驟後module檔案夾下會有這些檔案(build.bat  tolua++.exe  test2lua.pkg  LuaModule.pkg  LuaModule.h  LuaModule.cpp)。将LuaModule.h和LuaModule.cpp檔案拷貝到classes目錄下,導入到工程。

6.将我們的module注入到LuaScriptEngine裡

打開AppDeletegate.cpp,找到CCLuaEngine* pEngine = CCLuaEngine::defaultEngine();這一行,在後面追加一行tolua_LuaModule_open(tolua_s);同時加入LuaModule.h頭檔案,最後編譯下工程。之後我們就可以在lua檔案裡加入自己的自定義類了。

local num1 = CTest2Lua:new(3)
    local num2 = CTest2Lua:new(6)
    print("number1:"..num1:getNumber())
    print("number2:"..num2:getNumber())
           

如果沒什麼問題就能列印出内容。