将Lua绑定的粘合代码与我的游戏引擎其他部分分离。
2014-5-4 7:51:13
收藏:0
阅读:125
评论:2
我想要在我的游戏引擎中添加完整的 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 中?
原文链接 https://stackoverflow.com/questions/5146896
点赞
stackoverflow用户298661
你可能选择拥有一个派生自 LuaEntity 类的类(取决于你的设计),来处理这些东西。你也可以选择使用多态函子(boost::function)来代替,这些函子可以在运行时提供和更改。
2011-02-28 20:11:49
评论区的留言会收到邮件通知哦~
推荐文章
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
《游戏编码完全指南》(第三版)针对这个确切的问题提供了解决方案。基本上,它设置引擎具有通用事件系统,然后有一个脚本模块注册自己要响应的事件。事件系统对 Lua 一无所知,Lua 包装器只需要知道它想要处理的事件名称,因此耦合非常小。