【发布时间】:2012-01-11 16:44:20
【问题描述】:
我一直在研究如何将 C++ 类绑定到 Lua 以在游戏引擎中使用,但遇到了一个有趣的问题。我一直在关注这个网站上的教程:http://tinyurl.com/d8wdmea。看完教程,才发现他建议的代码如下:
local badguy = Monster.create();
badguy.pounce = function(self, howhigh, bonus)
self.jumpbonus = bonus or 2;
self:jump(howhigh);
self:rawr();
end
badguy:pounce(5, 1);
只会将 pounce 函数添加到 Monster 的特定实例。所以我将他建议的脚本更改为以下内容:
function Monster:pounce(howhigh, bonus)
print("in pounce function");
print(bonus);
self.jumpbonus = bonus or 2
self:jump(howhigh);
self:rawr();
end
local badguy = Monster.create();
badguy:pounce(5,1);
但是,当我调用 pounce 函数时,脚本会中断。经过进一步测试,我能够成功调用 pounce 函数的唯一方法是将该函数作为 Monster 类的静态成员调用(该函数的代码保持不变):
Monster.pounce(badguy,5,1);
从语法上讲,badguy:pounce(5,1) 是正确的,但没有正确调用函数。我只是做错了什么,还是这是 lua 和 c++ 之间绑定的限制/我如何绑定这两种语言?
【问题讨论】:
-
这里只看到Lua,这个问题真的和C++有关系吗,还是这完全是一个LUA问题?
-
是否打印“in pounce 功能”调试消息?在代码的每一行之间添加更多调试打印,以找出崩溃的确切位置,我们将能够为您提供更好的帮助。
-
你还能添加脚本是如何中断的吗?你得到什么样的错误消息和回溯?它是完全进入
pounce函数还是出现nil值错误等? -
@MooingDuck 是的,Monster 类是用 C++ 定义的,并且使用静态方法包装器绑定到 Lua 到成员函数。我的一个想法是,因为 pounce 函数没有在 C++ 中定义,而我在 Lua 中创建它,所以它不能作为静态函数工作。
-
@Deco 不,“in pounce 函数”在像成员函数一样被调用时不会打印。当我尝试将 pounce 函数作为成员函数调用时,脚本会中断。
标签: c++ lua lua-c++-connection