我正处于使用 Lua 脚本编写 C++ 游戏的设计/骨架编码阶段,但我遇到了设计问题:
游戏将有许多相同类型实体的副本,其行为由相同的脚本控制。有没有一种简单的方法可以在单个 lua_state 中在相同类型的实体之间共享脚本?我只能在互联网上找到这个问题被问过几次;我已经阅读了关于在不同的 lua_state 中加载相同的脚本是否是一个好主意的混合反馈,而不是关于替代方案的深入反馈。
它简单且防弹,但我认为在创建相同实体类型的每个实例时加载、编译和存储相同字节码的附加副本是一种悲惨的浪费,所以我想找出一个更聪明的解决方案。
这是我想到的两个解决方案。我对编程或 C 或 OO 概念并不陌生,但我仍在学习 Lua,尤其是 Lua/C API。我认为我的想法是合理的,但我什至不确定我将如何实施它们。:
在 Lua 脚本中实现 OO,并让每个实体由一个 Lua 对象表示;所有 Lua 逻辑都将作用于该对象。这也将具有允许任何单一实体改变全球环境的好处(或“好处”)。
使用 setfenv 将每个实体封装在其自己的环境中,并从全局空间复制所有函数的引用。据我了解,env 只是一个与默认全局不同的表,但我已经研究了 setfenv 但我不知道我会怎么做。