当前位置:首页 » C语言&C++

cocos2dx中注册导出c++函数供lua调用(使用tolua++)

2014-03-08 16:10 本站整理 浏览(4455)

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