我稍早之前发布过 在 r/godot。我收到了很多好评,许多人对这篇简短的文章表示感谢,我认为它对一般的游戏开发都很有意义,所以我想在这里发布另一条。所以,虽然大部分学到的东西在一般情况下都适用,但请记住我是在 Godot Engine 上进行开发的。
过去两周,我花了时间在我的游戏中实现了一个完整的保存/加载系统。我之前已经有了一个粗糙的实现,可以在调试和测试时跳过某些部分,但它不足以应付游戏系统日益增长的复杂性。当我意识到现有系统已经到了极限后,我决定暂停功能开发,并实现一个真正的保存/加载系统,它能够存储当前所有相关内容,并且具备未来的可扩展性。我不打算详细讨论保存/加载系统本身,因为它高度依赖于每个游戏,我更想谈谈在实施它时得到的一些边缘学习:
JSON
因此,我第一次意识到我无法仅仅把所有自定义资源保存为 .tres 文件(我在这里简要写过,并且有一段有趣的视频解释为什么保存资源是个坏主意)。我对 Godot 还很陌生,而且这是我第一次以程序员身份(我以前在团队里主要负责美术/设计,很少编程)角色来编程,老实说我原本以为保存内容的正确做法是使用资源。但如我在链接的帖子评论中看到的,或者在官方文档(请阅读官方文档!)中也能看到,你绝对应该使用 JSON。(对于不想深入阅读的人的提示:这是一个巨大的安全风险,你不能忽视它)。JSON 的一个好处是数据是可供人类阅读的,这点我很喜欢。为数据制定合适的结构以及为主题性数据创建容器是我很享受的过程。
游戏结构
这一条直接来源于 JSON 格式,你会被迫大量思考游戏中拥有的数据类别。诸如资源归属以及哪些事物可以在主题上进行分组等问题,极大地帮助我以往未曾尝试的方式思考游戏设计。虽然没有巨大的顿悟,但梳理所有已有的内容并构建一个全面的结构很有意义,这也体现在了 JSON 中。
游戏流程
可能是我大脑受到最大冲击的事情,是被迫真正理解游戏中事件发生的顺序。例如在我的游戏中,我先创建一艘飞船,然后初始化飞船内的房间,接着构建飞船的路径网络。随后我可以在路径上召唤船员,然后初始化他们的状态机大脑。最后我启动世界,包括其时间以及昼夜循环系统。乍一看这听起来很简单,但当我第一次接触这个话题时,发现我的游戏启动序列被各种系统交织在一起,互相等待,发出其他系统等待的信号,等等。起初我对游戏启动的驱动因素感到困惑——尽管它在当时的状态下已经运行,但我必须彻底弄明白它为何能运行,于是通过整理一些事务、删除全局变量、将信号改为直接调用等方式,使启动过程变得更加清晰可读。非常复杂且痛苦,但绝对值得做!
字典!
这对很多人来说可能很平凡,但正如我所说,我作为独自开发游戏的程序员还很新手。我在实现保存/加载系统之前就使用过字典,但老实说我从未真正完全理解它们的工作原理。但一旦你使用 JSON,你就被迫真正、彻底地理解字典的工作方式以及它们与数组的区别。现在我对它们更有信心,这对我的编码技能是一个很好的提升。
保存……什么?
最后但不 least,这可能是一个迫使你做出游戏设计决定的最大编程特性。我的游戏到底保存了什么,以及何时保存?我可以随时保存吗?还是只能在关卡之间或特定点保存?被迫在此方面做出决定能极大地促进游戏设计,因为这是一个根本性的决定,可能会让你的游戏进入你最初未曾预料的类型。
评论 (0)