Galaxy2D游戏引擎添加LuaClass模块用于导出类到Lua中

14 views
Skip to first unread message

剑孤寒

unread,
Aug 16, 2008, 3:51:58 AM8/16/08
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函数即可直接调用上面的函数。
Reply all
Reply to author
Forward
0 new messages