隔离Lua绑定游戏引擎其余部分的胶水代码
我想为我的游戏引擎添加对Lua脚本的全面支持。 我为自己设定的最大目标之一是保持完整的模块化。 这意味着,除了Lua绑定部分之外,我不希望我的引擎的其余部分使用任何特定于Lua的功能。
直到现在,这已经证明并不困难。 纯C ++到Lua函数的绑定部分 - 就像绑定Vector,Color和Entity对象,以及诸如Draw库或Physics库这样的模块,很容易与引擎的其余部分隔离。
现在,我的问题在于事件 。 我需要为脚本编写者提供一种响应游戏事件的方式。 这涉及到从引擎调用Lua函数。
示例:在Lua中的C ++实体上调用OnCreate
, OnUpdate
, OnCollide
。
这些事件发生在我的CEntity基类中,而Lua模块无法知道它们何时以及如何发生。
可能的解决方案:
坏坏坏! 这是Lua绑定的东西混合到基础实体类中!
不幸的是,我不太了解这一点。 我相信这会很难实现,也会带来一些小的逻辑和性能问题。
- 如何在我的C ++引擎中触发Lua中的事件(调用一个钩子函数),而不在我的程序的Lua绑定模块之外有任何Lua绑定代码?
游戏代码完成(第三版)有一个解决方案,确切的问题。 基本上,他将引擎设置为具有通用事件系统,然后有一个脚本模块,用于注册自己想要响应的事件。 事件系统对Lua一无所知,而Lua包装器只需知道它想要处理的事件的名称,所以耦合是非常小的。
你可能会选择(取决于你的设计)一个LuaEntity派生类,它处理这些东西。 您也可以选择使用多态函子(boost :: function),它可以随时提供和更改。
链接地址: http://www.djcxy.com/p/30687.html上一篇: Isolate Lua bindings glue code from the rest of my game engine