我有一本C ++游戏编程书,其中有Lua部分。我已经开始阅读Lua一节,这听起来很有趣,但是我无法确定在我的C ++游戏中使用Lua的优缺点。我目前能想到的唯一好处是,您可以通过Lua进行一些编码更新,而无需重新编译。除此之外,我什么都没想到。那么将Lua添加到C ++游戏中的利弊是什么?
示例将不胜感激。
我有一本C ++游戏编程书,其中有Lua部分。我已经开始阅读Lua一节,这听起来很有趣,但是我无法确定在我的C ++游戏中使用Lua的优缺点。我目前能想到的唯一好处是,您可以通过Lua进行一些编码更新,而无需重新编译。除此之外,我什么都没想到。那么将Lua添加到C ++游戏中的利弊是什么?
示例将不胜感激。
Answers:
我目前能想到的唯一好处是,您可以通过Lua进行一些编码更新,而无需重新编译。
不要轻易地贬低它的效用。除非您不执行重新编译步骤,否则您将永远无法理解自己的生产力。
在“流”是一个相当容易理解的心理学概念,当涉及到的工作。流程就是那种当您专注于一项活动时,当您几乎不加思索地分析和解决问题时所得到的感觉。当您“流动”时,您的工作效率最高。
编译时间搞砸了所有这些。如果您在两次测试之间进行10秒钟的编译,则很难停留在流程中。
在开发游戏玩法时,通常会遇到“紧密循环”。您有一个想法,您编写了一个测试代码以查看它是否有效,然后尝试一下。如果它不起作用,请对其进行修改,然后重试。“代码测试”时间对于保持流程非常重要。使其尽可能小至关重要。
Lua(或任何嵌入式脚本语言)允许您做的是测试更改,而不仅仅是在不进行“编译”的情况下,而是在游戏中进行测试。根据您构建游戏的方式,您可以运行将使用新脚本重新启动游戏的命令,而无需停止和重新加载数据等。您不仅不必重新编译,也不必重新运行。
在适当的发动机支持下,执行此操作的能力可以大大提高生产率。
脚本编写的另一个主要好处是不必关心。如果您花了很长时间编写C ++,那么您花了多少时间花费分钟的时间就会感到惊讶。删除内存的位置。在哪里得到释放。即使您shared_ptr
随处使用,输入所有这些变量类型名称的操作也会使您减速。
在动态类型的脚本语言中,您不必关心。范围很简单。函数是一流的对象;您不必手动构建函子。做一些事情是如此容易。
如果您不是训练有素的程序员,那么现在确实有负面影响。在Lua中使用全局变量非常容易(尽管有很多方法可以防止这种情况)。不关心意味着您编码时会很草率。
但是话又说回来,很马虎可以有好处。
Lua的另一个优点是,它提供了一种很好的数据描述语言。就像JSON只是一个生成并返回数组/表的JavaScript文件一样,您可以制作返回表的Lua脚本。
这对于配置文件很有用;Lua的表格格式比.ini格式要好得多。格式仍然很干净,紧凑和可扩展。
哦,它仍然是Lua脚本,因此它可以执行实际的逻辑。不利之处是……这是一个Lua脚本,因此它可以执行实际的逻辑。这在游戏中可能是灾难性的,因为用户可能会开始搞砸事情。
但是实际上,这很容易解决。Lua是为嵌入而设计的,这意味着隔离实际上非常容易。实际上,默认情况下,新的Lua状态不提供任何内容。您实际上必须做一些事情来公开最基本的标准Lua库。文件访问,游戏状态访问等都是选择加入,而不是选择退出。每个Lua状态彼此独立。用于AI脚本的Lua状态不必是用于配置文件的Lua状态。
实际上,我有一些代码可以允许您注册许多Lua标准库,但是会删除所有文件IO。归根结底,基于Lua脚本的配置文件可能会发生的最糟糕的情况是,由于运行不足,导致游戏运行时立即崩溃。而且由于您不是手动共享这些配置文件,所以对于黑客来说并没有太大的乐趣。
我会说所有脚本语言的最大缺点是调试。大多数脚本语言没有调试器,Lua也不例外。Lua确实拥有构建调试工具所需的所有工具。但是它实际上没有内置调试器。你必须把一个放在一起。这将需要合理的工作量。
或者,您可以使用“ printf调试”进行调试。这实际上取决于您编写了多少Lua代码。
我在哪里工作:
优点:
luac -l
字节码的输出并查看字节码以进行一些分析很容易;解析大多数lua源文件也非常容易,尤其是在您具有编码约定的情况下。我们可以执行当地惯例。您也可以在此处查看metalua,以获取更多功能。lua_pcall
。缺点:
step
应该做什么,每场比赛都会发生巨大变化。在每帧全GC(较小的工作集)下,某些方法会更好地工作。有些人在很少通过的情况下表现更好,而很少。请注意,在更新的lua版本和某些修补程序中,还有很多工作要做(您不应该害怕使用它!)lua_State
在某些情况下,我们卸载脚本或完全丢弃脚本。而且有时候我们还是有问题。调整小型对象池的大小(为简化和降低开销,它们是固定的)和lua专用大型对象堆的大小可能很麻烦。但是在大于约4MB的系统上,我们还没有为专门的堆和池而烦恼。__index
和__newindex
)。最好在编译时捕获错误。您可以采取多种措施来减轻这种情况。Lua极力推荐,只要愿意就可以使用它!您可能还想看看Squirrel,尽管我相信它的用户群较小。
实际上有3大优势:
这些因素使您作为游戏开发人员能够启用可加快开发速度并提高游戏质量的功能。
例如:
从我的经验来看,归结为一点。
优点
缺点
最终的,个人的结论:如果您要开发一款尺寸合适的游戏,并且还没有脚本语言,请使用Lua。这是值得的。