3

我正在使用 C++ 开发游戏。不过,有人告诉我,我还应该使用像 Lua 或 Angelscript 这样的可嵌入脚本语言,但老实说,我不知道如何或为什么。与将我的所有数据存储在某种文本文件中相比,这会给我带来什么好处?我该如何开始?我试图阅读一些 Lua 示例,但我不知道它是如何工作的,或者我应该如何使用它。

4

3 回答 3

4

首先是“为什么”问题:

如果到目前为止你已经取得了合理的进展,那么你就有了动作发生的游戏场景,然后是一种带有可见游戏控件的 GUI:地图、指南针、热键、聊天框等等。

如果您通过配置文件使 GUI(位置、大小、设置、默认值等)可配置,那么对于初学者来说没问题。但是如果你让它可以通过代码控制,那么你可以做很多很酷的事情。示例:进入城市时最小化地图。组队时显示其他玩家的头像。更新地图。在战斗中显示不同的热键。那种东西。

现在您可以在 C/C++ 代码中对您的 GUI 进行代码控制,但一个问题是,无论何时您想要更改行为,即使只是一点点,您都需要重新编译整个该死的游戏客户端。如果你有 10 亿玩家,你必须给他们一个新的游戏客户端。那是一个关闭。另一个问题是玩家根本无法自定义 GUI。

一个简单的嵌入式语言解决了这两个问题。您可以将这种代码放在单独的文件中,这些文件在运行时加载,并且可以随心所欲地调整。如果您想以某种较小的方式更新 GUI,您可以独立于游戏本身提供 GUI 代码的更新。

至于如何

最简单的做法是为每一帧调用一次(例如)Lua“主”例程,可能会传递一堆带​​有最新可更新信息的参数,然后让该主例程调用其他函数来做任何需要的事情。要注意的是您的嵌入式代码只能在很短的时间内获得控制权,即两次屏幕刷新之间的时间;因此它会进行一些更新和绘制,然后再次退出并将控制权返回给您的 C/C++ 主程序循环。

从技术上讲,在程序中嵌入 Lua 解释器非常容易。Lua 解释器有 C 源代码,或者有用于 Windows 的预编译库 (DLL)。只需将它们链接到您的程序中,初始化一次,在主框架循环的每次迭代中调用入口点,就完成了。

于 2009-12-11T21:43:11.820 回答
3

脚本比将所有数据存储在文本文件中更强大。您可以分配任意行为,从其他数据构造数据(例如,兽人队长是兽人多一点),等等。

与C++ 相比,脚本允许更快的开发和更容易的维护。没有编译/编辑/链接周期,您甚至可以在游戏运行时调整脚本,并且它们更容易在最终用户的机器上更新。

至于如何做,一个建议是看看其他游戏是如何做到的。例如,用 C 编写的 Roguelike RPG TOME广泛使用 Lua。

于 2009-12-11T21:48:04.630 回答
1

如需一些灵感,请查看C2 wiki 上描述的Alternate Hard and Soft Layers模式。

至于我的两分钱,为什么要嵌入脚本语言?我经历过的一些原因包括,

  • REPL
  • 简单的字符串操作工具
  • 在数据集中利用循环、宏和递归的力量
  • 创建动态生成的内容
  • 用于从 Web 获取内容的包装器
  • 如果数据丢失,提供默认值的逻辑
  • 在数据集级别编写的单元测试
于 2009-12-11T21:43:44.113 回答