【发布时间】:2011-07-06 00:52:57
【问题描述】:
我想为我的游戏引擎添加对 Lua 脚本的全面支持。我为自己设定的最大目标之一是保持完全的模块化。这意味着,除了 Lua 绑定部分之外,我不希望我的引擎的其余部分使用任何 Lua 特定的功能。
直到现在,事实证明这并不难。纯 C++ 到 Lua 函数的绑定部分——比如绑定 Vector、Color 和 Entity 对象,以及 Draw 库或 Physics 库等模块很容易与引擎的其余部分隔离。
现在,我的问题在于事件。我需要为脚本编写者提供一种响应游戏事件的方法。这涉及从引擎调用 Lua 函数。
示例:在 Lua 中对来自 C++ 的实体调用 OnCreate、OnUpdate、OnCollide。
这些事件发生在我的 CEntity 基类中,Lua 模块无法知道它们何时以及如何发生。
可能的解决方案:
- 在 C++ 基础实体中的事件中添加函数调用,从而触发 Lua 脚本中的事件
坏坏坏!这是 Lua 绑定的东西,直接混入了基础实体类!
- 向我的引擎添加某种事件系统,其中实体事件触发一个事件,该事件也可以被 Lua 绑定模块捕获并进行适当处理。
不幸的是,我对此知之甚少。我敢肯定这将很难实现,并且还会带来一些小的逻辑和性能问题。
- 在我的程序的 Lua 绑定模块之外没有任何 Lua 绑定代码的情况下,如何在我的 C++ 引擎中触发 Lua 中的事件(调用挂钩函数)?
【问题讨论】:
标签: c++ design-patterns lua game-engine