剑孤寒
unread,Aug 16, 2008, 3:51:58 AM8/16/08Sign in to reply to author
Sign in to forward
You do not have permission to delete messages in this group
Sign in to report message
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
to 剑孤寒的游戏编程小站
今天得空在家,于是把导出类到Lua的代码封装的一下放到Galaxy2D引擎中的Framework中。
支持继承和多继承类的导出,
并且还可在Lua脚本里继承导出类。
使用说明:
-----------------------------------------------------------
导出类:
class A
{
public:
void Fun1() {}
virtual void Fun2() {}
};
ggeLuaClass<A>(LuaState, classname, p)
.def("Fun1", &A::Fun1) //导出类中的函数
.def("Fun2", &A::Fun2);
classname为导出的类名,可以不写。不写时仅仅把这个类导到Lua中用以在继承或导出类指针中使用。
p为导出类指针,可以不写。不写时仅仅把这个类导到Lua以classname命名的表中,以便改写其中的某些函数。
假设classname = "A",p为类A实例的一个指针,
在Lua中可以这样调用类上的函数:
A:Fun1()
A:Fun2()
-----------------------------------------------------------
导出继承类:
class B:public A
{
public:
void Fun2() {}
void Fun3() {}
}
先导出基类:
ggeLuaClass<A>(LuaState)
.def("Fun1", &A::Fun1)
.def("Fun2", &A::Fun2);
再导出继承类:
ggeLuaClassInherit<A, B>(LuaState, classname, p)
.def("Fun2", &B::Fun2)
.def("Fun2", &B::Fun3);
如果B是多继承类,比如还从C类继承,则只需再导出一次即可:
ggeLuaClassInherit<C, B>(LuaState, classname, p);
-----------------------------------------------------------
导出类指针:
ggeLuaBoxPointer<A>(LuaState, p)
该函数返回一个LuaObject,
那这个LuaObject当返回值,或当参数传给调用的Lua函数即可直接调用上面的函数。