SpringRTS 中的 Lua/什么是 Spring 引擎
简单来说,引擎是游戏的核心。通常,游戏开发团队会制作一个引擎来处理大部分繁重的工作,例如物理和 3D 渲染。物理和 3D 渲染是游戏中最消耗 CPU/GPU 的部分,也是通常包含整个游戏中最多代码的部分。3D 模型、纹理等则保存在引擎之外。
这样做的原因是为了避免调整游戏需要对整个游戏的代码进行重大更改。在过去(引擎还没有被使用之前),曾经存在包含所有游戏内容的大型文件,因此如果有人想要更改游戏中的内容,那将会是一件很麻烦的事情。这个人必须深入研究游戏的每一行代码,并仔细检查更改后没有任何问题。将模型、纹理和其他游戏元素分开,使得维护游戏变得容易得多,也方便了将来进行调整。
Quake 的示例
你可能听说过 Quake 引擎,它被公开发布。有了引擎,人们就可以改变很多东西(修改)甚至制作新的游戏。例如,从 Quake 引擎衍生出了一个开源游戏叫做 Warsow(以及其他游戏)。Warsow 的开发者所做的事情是采用引擎并使用自己的模型、纹理和其他文件。他们可能还稍微更改了引擎以满足他们的需求。重要的是,你可以自己使用 Quake 引擎并使用自己的模型,如果你愿意还可以进行修改。这样,只需修改一小部分游戏,就可以让它看起来像一个新的游戏。
这种“游戏修改”的方法甚至在市场上广泛使用。一个团队开发一个引擎,然后用同一个引擎制作一系列不同的游戏,这很常见。这样,未来的游戏只需要有限的编码工作。
Spring 引擎是基于旧游戏《全面战争》而构建的。这就是为什么许多不同的游戏(mod)拥有相同的特征,例如金属和能量资源系统。
当为 Spring 制作游戏时,你实际上是在制作一个修改(mod)。引擎保持不变,唯一改变的是外部部分,例如地图、单位模型、单位行为、纹理、音轨、AI 行为等。游戏的核心仍然存在于引擎中,因此你的自由度有一定限制。
即使有这样的限制,你仍然可以通过多种方式改变游戏的画面。你甚至可以改变金属/能量系统,但这需要大量的 Lua 代码,最终会使游戏运行速度变慢。请记住,Lua 的运行速度比 Spring 引擎使用的 C++ 语言慢 3 倍。