如何开始使用可嵌入脚本?

我正在用C++制作一个游戏。然而,有人告诉我应该使用可嵌入的脚本语言,比如Lua或Angelscript,但说实话,我不知道怎么使用或为什么要使用。相较于将所有数据存储在某种文本文件中,这会带给我什么优势?该如何开始使用?我尝试阅读了一些Lua示例,但我不知道它是如何工作的,也不知道我应该如何使用它。

原文链接 https://stackoverflow.com/questions/1891002

点赞
stackoverflow用户172211
stackoverflow用户172211

首先是 "为什么"问题:

如果你已经取得了一些合理的进展,你会有游戏场景和一种带有可见游戏控件的GUI:地图、指南针、热键、聊天框等等。

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

现在,你可以在C/C++代码中控制GUI,但一个问题是,每当你想要改变它的行为,即使只是一点点,你就需要重新编译整个游戏客户端。如果你有数十亿的玩家,你必须给他们所有人送上一个新的游戏客户端。这是一个令人沮丧的事情。另一个问题是,玩家没有办法自定义GUI。

一个简单的嵌入式语言解决了这两个问题。你可以把那种代码放在单独的文件中,在运行时加载,可以按照每个人的喜好进行调整。如果你想以某种微小的方式更新GUI,你可以单独交付GUI代码的更新,与游戏本身分离。

至于 "如何":

最简单的方法是在每一帧调用(例如)Lua的 "main"例程,可能传递一堆带有最新可更新信息的参数,并让该主例程调用其他函数来执行所需操作。要知道的是,你嵌入的代码只在很短的时间内控制屏幕刷新之间的时间;所以它做了一点更新和绘画,然后又退出了,并返回控制权给你的C/C++主程序循环。

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

2009-12-11 21:43:11
stackoverflow用户9974
stackoverflow用户9974

为了获得灵感,可以查看 C2 wiki 上描述的“交替硬和软层”模式。

至于我个人的看法,为什么要嵌入一种脚本语言呢?我的一些经验包括:

  • REPL
  • 方便进行字符串处理
  • 利用循环、宏和递归在数据集中发挥其力量
  • 创建动态生成的内容
  • 从网络获取内容的包装器
  • 逻辑用于在数据缺失时提供默认值
  • 在数据集级别编写的单元测试
2009-12-11 21:43:44
stackoverflow用户25507
stackoverflow用户25507

脚本相比于将所有数据存储在文本文件中,具有更强大的功能。您可以指定任意行为,从其他数据构建数据(例如,兽人队长是略微加强版的兽人),等等。

脚本比 C++ 更易于开发和维护。无需进行编译/编辑/链接循环,您甚至可以在游戏运行时调整脚本,并且它们更容易在最终用户的计算机上进行更新。

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

2009-12-11 21:48:04