Jar*_*arx 5 c++ lua design-patterns game-engine
我想为我的游戏引擎添加对Lua脚本的完全支持.我自己设定的最大目标之一是保持完全模块化.这意味着,除了Lua绑定部分之外,我不希望我的引擎的其余部分使用任何特定于Lua的功能.
事实证明,直到现在还没有任何困难.纯C++到Lua函数绑定部分 - 比如绑定Vector,Color和Entity对象,以及诸如Draw库或Physics库之类的模块很容易与引擎的其余部分隔离.
现在,我的问题在于事件.我需要为脚本编写者提供一种响应游戏事件的方法.这涉及从引擎调用Lua函数.
例如:呼叫OnCreate,OnUpdate,OnCollide从C++在Lua实体.
这些事件发生在我的CEntity基类中,Lua模块无法知道它们何时以及如何发生.
可能的解决方案:
坏坏了!那是Lua绑定的东西混合到基础实体类中!
遗憾的是,我对此并不太了解.我确信它很难实现,也会带来一些小的逻辑和性能问题.
- 如何从我的C++引擎中触发Lua中的事件(调用钩子函数)而不需要在程序的Lua绑定模块之外使用任何Lua绑定代码?
游戏代码完整(第 3 版)针对该问题提供了解决方案。基本上,他将引擎设置为具有通用事件系统,然后具有一个脚本模块,用于注册自己想要响应的事件。事件系统对Lua一无所知,而Lua包装器只需要知道它想要处理的事件的名称,因此耦合性非常小。