目前我在lua中有一些东西就像使用表格的OOP一样。
TCharacterController = {}
TCharacterController.speed = 10.0
TCharacterController.axis = "x"
function TCharacterController:new(o)
o = o or {}
setmetatable(o, self)
self.__index = self
return o
end
function TCharacterController:update()
--this is a function that is called by the C application
end
概念是我将创建一个子对象
ScriptObj = TCharacterController:new()
为我的应用程序中的一个对象附加的每个脚本实例(这是一个游戏)。所以我有一个实体层,所有实体都可以附加ScriptObj。我的想法是脚本实际上是一个类,它也是为它所连接的每个实体实例化的。
我的问题是,如何使用C API实例化TCharacterController的实例?
答案 0 :(得分:3)
由于new使用自引用语法糖,你需要将self作为第一个arg传递,其余的只是表查找的函数调用:
lua_getglobal(L, "TCharacterController"); /* get the table */
lua_getfield(L, -1, "new"); /* get the function from the table */
lua_insert(L, -2); /* move new up a position so self is the first arg */
lua_pcall(L, 1, 1); /* call it, the returned table is left on the stack */