我正在使用C ++开发游戏。但有人告诉我,我也应该使用Lua或Angelscript这样的嵌入式脚本语言,但说实话,我不知道如何或为什么。这会给我带来什么好处,而不是将我的所有数据存储在某种文本文件中?我该如何开始?我试着阅读一些Lua示例,但我不知道它是如何工作的,或者我应该如何使用它。
答案 0 :(得分:4)
首先是“为什么”问题:
如果到目前为止你已经取得了合理的进展,那么你就会看到动作发生的游戏场景,然后是一种带有可见游戏控制的GUI:地图,指南针,热键,聊天框等等。
如果您通过配置文件配置GUI(位置,大小,设置,默认值等),这对初学者来说是可以的。但是如果你通过代码使它可以控制,那么你可以做很多非常酷的事情。示例:进入城市时最小化地图。在小组中显示其他玩家的肖像。更新地图。在战斗中显示不同的热键。那件事。
现在您可以使用C / C ++代码对GUI进行代码控制,但有一个问题是,无论何时您想要更改行为,即使只是一点点,您也需要重新编译整个dang游戏客户端。如果您有十亿玩家,则必须向他们发送所有新游戏客户端。这是一个关闭。另一个问题是,玩家无法自定义GUI。
一个简单的嵌入式语言解决了这两个问题。您可以将这种代码放在运行时加载的单独文件中,并且可以摆弄任何人的心脏内容。如果您想以一些小的方式更新GUI,您可以单独从游戏中提供GUI代码的更新。
至于如何:
最简单的方法是为每个帧调用一次(例如)Lua“main”例程,可能会传递一堆带有最新可更新信息的参数,并让该主程序调用其他函数来执行任何需要的操作。需要注意的是,您的嵌入式代码只能在短时间内获得控制权,即两次屏幕刷新之间的时间;所以它做了一点更新和绘画,然后它再次退出并将控制返回到你的C / C ++主程序循环。
从技术上讲,在程序中嵌入Lua解释器非常简单。 Lua解释器有C源代码,或者有Windows的预编译库(DLL)。只需将它们链接到您的程序中,初始化一次,在主帧循环的每次迭代中调用入口点,完成。
答案 1 :(得分:3)
脚本比将所有数据存储在文本文件中更强大。您可以分配任意行为,从其他数据构建数据(例如,兽人队长是更多的兽人),等等。
脚本允许比C ++更快的开发和更容易的维护。没有编译/编辑/链接周期,您甚至可以在游戏运行时调整脚本,并且在最终用户的计算机上更容易更新。
至于如何,一个建议是看其他游戏如何做到这一点。例如,用C语言编写的Roguelike RPG TOME广泛使用Lua。
答案 2 :(得分:1)
要获得一些灵感,请查看C2维基上描述的Alternate Hard and Soft Layers模式。
至于我的两分钱,为什么要嵌入脚本语言?我经历过的一些原因包括,