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

如何开始使用嵌入式脚本? 我正在用C++做游戏。不过,有人告诉我,我还应该使用Lua或Angelscript等可嵌入脚本语言,但老实说,我不知道如何使用或为什么使用。与将所有数据存储在某种文本文件中相比,这会给我带来什么好处?我如何开始?我试着阅读一些Lua的例子,但我不知道它是如何工作的,或者我应该如何准确地使用它,lua,scripting-language,Lua,Scripting Language,首先是“为什么”问题: 如果到目前为止你已经取得了合理的进展,你可以在游戏场景中进行动作,然后是一种带有可视游戏控件的GUI:地图、指南针、热键、聊天框等等 如果您通过一个配置文件使GUI(位置、大小、设置、默认值等)可配置,那么对于初学者来说就可以了。但是如果你能通过代码控制它,那么你可以做很多很酷的事情。示例:进入城市时最小化地图。在团队中展示其他玩家的肖像。更新地图。在战斗中显示不同的热键。诸如此类的事情 现在,您可以用C/C++代码来控制GUI,但有一个问题是,无论何时您想要更改行为,即

首先是“为什么”问题:

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

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

现在,您可以用C/C++代码来控制GUI,但有一个问题是,无论何时您想要更改行为,即使只是一点点,您都需要重新编译整个dang游戏客户端。如果你有10亿玩家,你必须为他们提供一个新的游戏客户端。那太令人讨厌了。另一个问题是,玩家根本无法自定义GUI

一个简单的嵌入式语言解决了这两个问题。您可以将这种代码放在单独的文件中,这些文件在运行时加载,并且可以根据任何人的内心内容进行修改。如果您想以某种次要方式更新GUI,您可以在游戏本身之外单独交付GUI代码的更新

至于如何

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


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

要获得一些灵感,请查看C2 wiki上描述的模式

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

  • 简单的字符串操作工具
  • 利用数据集中循环、宏和递归的强大功能
  • 创建动态生成的内容
  • 从web获取内容的包装器
  • 如果缺少数据,则提供默认值的逻辑
  • 在数据集级别编写的单元测试

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

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


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

我的一个朋友将Lua移植到没有操作系统的嵌入式DSP C/汇编程序应用程序中。然后他想出了如何用新的Lua字节码更新图像。他能够将编辑编译链接加载初始化测试周期从大约15分钟缩短到1分钟。作为C++开发人员,你需要花很多时间等待加载构建和初始化。有了Lua,你可以在飞行中改变很多行为。