asqbtcupid / unreal.lua

lua solution for UnrealEngine4
MIT License
300 stars 98 forks source link

写了个lua类继承自CppObjectBase然后NewCpp创建失败 #25

Closed moozen-cn closed 6 years ago

moozen-cn commented 6 years ago

继承自SimpleDlg在NewCpp就创建成功了 请问可以继承CppObjectBase么,那为什么不能创建?

asqbtcupid commented 6 years ago

Uobject用类的New方法,最简单的如 https://github.com/asqbtcupid/unreal.lua/blob/5e918e856216fc2fdbaa025b691a53ca09516810/LuaSource/controller/cmplayercontroller.lua#L28-L32

Actor用Spawn

https://github.com/asqbtcupid/unreal.lua/blob/5e918e856216fc2fdbaa025b691a53ca09516810/LuaSource/controller/cmplayercontroller.lua#L60-L70

moozen-cn commented 6 years ago

呃 不是这个意思,你说的这些我在XXX.lua.h 文件看到了,然后注册到lua了

function CppObjectBase:NewCpp(...)
    if not rawget(self, "_meta_") then
        error("not class")
    end
    return self._cppclass.New(...)
end

这里的self._cppclass就是C++注册到lua的类名吧,该怎么赋值呢

moozen-cn commented 6 years ago

应该是我理解错了,我并不想完全包装一个C++类,不用继承自CppObjectBase 只想普通使用lua模拟类的功能,继承ObjectBase就行了

asqbtcupid commented 6 years ago

这应该是遗留代码,不能直接调用cppobjectbase的NewCpp了,以前每个cppobjectbase声明的时候需要指定特定的c++类,所以才有_cppclass这个变量存储了对应的c++类,但我发现这样并不方便,所以改成现在的形式。

现在是可以多个c++类使用同一个lua类,就是说在c++类里的构造方法调用LuaCtor,这样在lua里拿到这个c++类的实例的时候,就会获得它对应的lua实例,相当于lua继承于该c++类,可以重载该c++类的方法,增加lua方法和lua成员变量。

如果是纯lua的面向对象,像你所说,继承自objectbase就行。

asqbtcupid commented 6 years ago

不过这套面向对象的机制是设计得比较严格的,跟我整个框架互相关联,包括很恶心的GC,还有Debugger的一些实现,如果有什么不满意,建议先理解清楚,按照自己的业务去改。

asqbtcupid commented 6 years ago

这是简单的关于luaclass的文档https://github.com/asqbtcupid/unreal.lua/wiki/luaclass

moozen-cn commented 6 years ago

好的 谢谢