我对Lua还比较新,正试图在我正在开发的游戏引擎中实现Lua脚本来控制逻辑。到目前为止,我已经成功通过引擎运行了Lua,并且能够从C调用Lua函数以及从Lua调用C函数。
现在引擎的工作方式是,每个对象类都包含一组变量,引擎可以快速地迭代这些变量以进行绘制或物理处理。虽然所有游戏对象都需要访问和操作这些变量才能使游戏引擎看到任何更改,但它们可以自由创建自己的变量,因为Lua在这方面非常灵活,所以我不会遇到任何问题。
无论如何,当前游戏引擎部分都位于C语言领域,出于性能原因,我真的希望它们能够保持在那里。因此,在理想情况下,当生成新的游戏对象时,我需要能够将这个标准的变量集作为Lua对象基类的一部分赋予Lua读写权限,然后其游戏逻辑就可以任意使用这些变量。
到目前为止,我已经保留了两个独立的对象表——Lua会生成一个新的游戏对象并将其添加到一个数字索引的全局对象表中,然后调用C++函数,该函数创建一个新的GameObject类并将Lua索引(int类型)与该类注册。这样做很好,C++函数现在可以看到Lua对象,并且可以使用dostring轻松地在Lua领域执行操作或调用函数。
现在我需要做的是将属于GameObject类的C++变量暴露给Lua,但是Google没有为我提供有用的信息。我遇到了一个非常好的方法(链接),该方法详细说明了如何使用标记进行此过程,但我读到了这种方法已被弃用,而应该使用元表。
那么,实现这一点的理想方法是什么?学习如何使用libBind或某些等效方法传递类定义是否值得麻烦,还是有简单的方法可以仅在生成时向全局Lua对象注册每个变量?截至Lua 5.1.4,最佳方法是什么?