如何开始使用可嵌入脚本?
2009-12-11 21:32:25
收藏:0
阅读:299
评论:3
我正在用C++制作一个游戏。然而,有人告诉我应该使用可嵌入的脚本语言,比如Lua或Angelscript,但说实话,我不知道怎么使用或为什么要使用。相较于将所有数据存储在某种文本文件中,这会带给我什么优势?该如何开始使用?我尝试阅读了一些Lua示例,但我不知道它是如何工作的,也不知道我应该如何使用它。
原文链接 https://stackoverflow.com/questions/1891002
点赞
stackoverflow用户9974
为了获得灵感,可以查看 C2 wiki 上描述的“交替硬和软层”模式。
至于我个人的看法,为什么要嵌入一种脚本语言呢?我的一些经验包括:
- REPL
- 方便进行字符串处理
- 利用循环、宏和递归在数据集中发挥其力量
- 创建动态生成的内容
- 从网络获取内容的包装器
- 逻辑用于在数据缺失时提供默认值
- 在数据集级别编写的单元测试
2009-12-11 21:43:44
stackoverflow用户25507
脚本相比于将所有数据存储在文本文件中,具有更强大的功能。您可以指定任意行为,从其他数据构建数据(例如,兽人队长是略微加强版的兽人),等等。
脚本比 C++ 更易于开发和维护。无需进行编译/编辑/链接循环,您甚至可以在游戏运行时调整脚本,并且它们更容易在最终用户的计算机上进行更新。
至于如何实现,一个建议是查看其他游戏的做法。例如,用 C 编写的 Roguelike RPG 游戏TOME广泛使用了 Lua。
2009-12-11 21:48:04
评论区的留言会收到邮件通知哦~
推荐文章
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
首先是 "为什么"问题:
如果你已经取得了一些合理的进展,你会有游戏场景和一种带有可见游戏控件的GUI:地图、指南针、热键、聊天框等等。
如果你让GUI(位置、大小、设置、默认值等)通过配置文件可配置,那么对于初学者来说就可以了。但是如果你让它可由代码控制,那就可以做很多非常酷的事情。例如,进入城市时最小化地图。在小组内显示其他玩家的肖像。更新地图。在战斗中显示不同的热键。那种事情。
现在,你可以在C/C++代码中控制GUI,但一个问题是,每当你想要改变它的行为,即使只是一点点,你就需要重新编译整个游戏客户端。如果你有数十亿的玩家,你必须给他们所有人送上一个新的游戏客户端。这是一个令人沮丧的事情。另一个问题是,玩家没有办法自定义GUI。
一个简单的嵌入式语言解决了这两个问题。你可以把那种代码放在单独的文件中,在运行时加载,可以按照每个人的喜好进行调整。如果你想以某种微小的方式更新GUI,你可以单独交付GUI代码的更新,与游戏本身分离。
至于 "如何":
最简单的方法是在每一帧调用(例如)Lua的 "main"例程,可能传递一堆带有最新可更新信息的参数,并让该主例程调用其他函数来执行所需操作。要知道的是,你嵌入的代码只在很短的时间内控制屏幕刷新之间的时间;所以它做了一点更新和绘画,然后又退出了,并返回控制权给你的C/C++主程序循环。
从技术上讲,在你的程序中嵌入Lua解释器相当容易。Lua解释器有C源代码,或者有Windows的预编译库(DLLs)。只需将它们链接到你的程序中,初始化一次,在主帧循环的每个迭代上调用入口点,就完成了。