我一直在研究从头开始构建一个基本的游戏引擎,在列出了其他引擎共有的功能列表之后,更重要的事情之一是它们具有嵌入式脚本语言,如 lua 或 python。
我的问题是嵌入式脚本语言如何优于仅制作用户可以包含在 c++ 文件中的头文件(或类似的东西),从而使他们能够访问许多功能和状态。我敢肯定那里有一个很好的答案,只是我还没有偶然发现。
除了为什么需要它之外,像 lua 这样的语言用于游戏引擎之类的东西是什么?
Lua 是一种比 C++ 简单得多的语言,编辑它所需要的只是一个文本编辑器。这将脚本事件和/或高级游戏逻辑的能力交到您的设计师和最终用户手中。动态类型和垃圾收集允许他们编写非常简洁的代码,专注于游戏逻辑,而不是像 C++ 这样的语言中获得的所有系统级的家务琐事。沙盒也容易得多。
Lua 是一种流行的选择,因为它是小型、可移植、可破解的 ANSI C 代码库;易于嵌入、扩展,而且——对于游戏开发者来说最重要的是——它具有最小的运行时占用空间(最快的解释语言之一)。它也是易于学习/读/写语法的完美组合,但具有强大的功能,例如在游戏中非常有用的协程。
包含脚本语言的原因是允许用户自定义行为而无需重新编译代码。
我不确定您在问题的第二部分中要问什么。您是在问使用了哪些其他语言,还是在问像 Lua 这样的语言使用了哪些方式?
如果您询问其他哪些语言对此有好处,那么其中一种语言就是 Tcl。Tcl 从一开始就被设计为一种嵌入式脚本语言,非常成熟和健壮,非技术人员很容易学习。
至于哪些脚本语言适合……配置文件是一种方法。通过使用编程语言而不是具有名称/值对的文本文件,它允许用户将逻辑添加到他们的启动文件中。例如,也许您允许用户为键盘上的按键分配不同的功能;使用编程语言,他们可以为不同的计算机添加不同的功能。或者,如果您正在创建类似 RPG 的游戏,也许您可以为不同的角色类别分配不同的键。如果玩法师,F12可能会施法,但如果玩战士,f12可能会做最后一击。
有许多方法可以使用脚本语言,并且有许多不同的语言可供选择。这一切都归结为允许您的用户自定义游戏的行为,而无需重新编译代码。
您可能会发现游戏开发人员撰写的这篇文章有助于理解为什么使用嵌入式语言。
http://www.grimrock.net/2012/07/25/making-of-grimrock-rapid-programming/
另一个很好的理由是,除非您与游戏用户共享源代码并且他们都是 C 程序员,否则 lua 等语言使用户可以扩展游戏,例如看魔兽世界。