天天看點

cocos2dx中注冊導出c++函數供lua調用(使用tolua++)

弄了半天終于搞定了,網上有很多相似的文章,但可能由于我基礎不好,總是出錯,最後搞定了。

參考http://www.cnblogs.com/mrblue/archive/2013/06/08/3126997.html,機器是windowsxp,VS2010

這種方法是不依賴于cocos2dx引擎中的LuaCocos2d.cpp,而完全在别處建立一個新的相同功能的cpp檔案。

隻需要以下幾步即可:

1,建立自己的類(當然)

2,為了以後建立用來與lua互動的中間類MyCToL.cpp(先不建立),先建立他的頭檔案MyCToL.h

3,建立總的pkg檔案

4,為要添加的新類建立pkg檔案

5,用cmd編譯一下

6,在AppDelegate.cpp中添加一行代碼,注冊一下

現在,一步步開始實作,為了快速看到效果,一切從簡吧

1,建立自己的類

因為頭檔案中也可以定義類,為了簡便,都寫在一個頭檔案MyClass.h中

class MyClass
{
public:
	MyClass(){};
	static int f(int a){return 10;};
};
           

2,建立MyCTol.h

#ifndef __MY_CPPTOLUA_H_
#define __MY_CPPTOLUA_H_


extern "C" {
#include "tolua++.h"
#include "tolua_fix.h"
}
#include "MyClass.h" 
TOLUA_API int tolua_MyCToL_open(lua_State* tolua_S);
#endif // __MY_CPPTOLUA_H_
           

3,建立總的pkg檔案

$#include "MyCToL.h"
 
$pfile "MyClass.pkg"
           

先建立記事本,再将上面兩行代碼copy進去,之後把字尾名改為.pkg就可以了

4,建立新類的pkg檔案

class MyClass
{
static int f(int a);
};
           

5,使用cmd編譯

将根目錄下的tolua++下的tolua++.zip解壓,可以得到tolua++.exe檔案,将它和上面建立的那些檔案放在一起。

在cmd中cd過去,輸入tolua++ -tCocos2d -o MyCToL.cpp MyCToL.pkg 回車,等指令執行完之後去目錄中看,多了一個MyCToL.cpp檔案,将它拖到項目裡

6,在AppDelegate.cpp中注冊

在CCLuaEngine* pEngine = CCLuaEngine::defaultEngine();下面一行添加

tolua_MyCToL_open(pEngine->getLuaStack()->getLuaState());

同時,在頂部加上他的頭檔案

運作一下,如果是提示 未能加載MyCToL.h No Such direct之類的,應該是頭檔案路徑與appDelegate不是同一目錄,可以參考我之前一篇文章:)http://blog.csdn.net/bark2003/article/details/20776553

在lua中測試一下

local aaa= MyClass:f(3)

CCLuaLog(aaa)

結果顯示正常,終于通了。。

轉載請保留原文位址http://blog.csdn.net/bark2003/article/details/20780653

繼續閱讀