对于定制游戏引擎,如果我的核心数据格式错误或丢失,该怎么办?


27

我正在为游戏编写自定义引擎。在了解为什么我应该使用中间件之前,我已经很好地开始了这个游戏,而且它太过重写了。

我的大部分数据来自外部文件,而我不仅指资产。我通过.JSON定义所有游戏对象。但是,a,我是人类。有时我的数据文件无效,或者我更改了格式但忘了更新文件,或者加载程序本身是错误的。

如果出于某种原因,尝试在自定义引擎中加载某种形式的资产的尝试失败,我有什么选择?

这与“ 我应该如何处理丢失的资源?”不是重复的,因为该问题与模型或纹理等面向用户的资产有关。坏的纹理可以用棋盘代替,坏的声音可以用静音替换,坏的文本可以用“ ERROR”替换。我的问题在于对游戏甚至运行至关重要的数据,例如关卡,游戏对象定义和GUI布局。


7
我在游戏中使用类似的方法。实际上,我构建了一个小型实用程序应用程序来生成我的游戏数据文件以避免人为错误-通过这种方式,如果我要进行更改而不必手动编写100,000行JSON,就可以修改文件。
JDSweetBeat '16

您还可以在加载数据之前通过验证器运行数据。
JDSweetBeat '16

我的JSON很小,无法自动生成它。另外,如果缺少JSON,或者应该读取的内容中有错误,验证器将无济于事。不过,感谢您的想法。
JesseTG '16

Answers:


44

记录错误并正常退出。

理想情况下,还要在屏幕上显示人类可读的错误。应该有一个硬编码功能的核心管道,该管道无需这些数据文件即可运行。首先是与加载数据文件相同的管道。它应该能够检测这些核心数据文件何时损坏或以其他方式出现故障并结束应用程序。如果用户打算修改这些文件,则别无他法。否则,您需要实施测试策略以确保不会发生此类损坏。然后,您可以确保只释放有效的数据文件。


12

字节56提到了一个选项。至少有一个:

假定默认值并显示警告。

根据数据的性质,完全可以接受一些默认值并警告用户“由于文件xxx加载失败,我们正在使用通用yyy对象”。


6

这取决于是否在开发或发布期间发生。

在开发过程中,您会一直无休止地丢失各种东西,错误和混乱,您甚至可能想按需“热”加载资产或在游戏运行时更换资产。您可以在运行游戏的情况下编辑脚本,以测试AI的性能更好,或类似的结果。

如果程序每次显示错误对话框并退出,这是很烦人的,您必须重新启动它,这需要2-3分钟。开发的目标是使您(时间是最宝贵的资产)停滞不前。
因此,例如,如果缺少纹理,您可能希望看到类似红白色棋盘格的东西,也许在其顶部拼写有“ missing”一词作为替换纹理,所以很明显,有些东西很奇怪。但是您不希望游戏正常退出,甚至也不会崩溃。有关日志文件中缺少的内容的详细信息非常有帮助。

另一方面,在发行版中,理想情况下,完整的资产文件集[1]应该已经通过了自动资产管道。这仅需要一个简单的解析器,该解析器读取所有JSON,然后交叉检查每个模块本身是否一致,并验证您引用的每个资产是否确实存在,然后压缩整个文件堆。以某种易于理解的已知(但不一定是标准)的方式进行配置,可以选择添加一些校验和。

知道不会有任何失败,因为在将软件包发布给最终用户之前,您的管道会检查所有内容。因此,如果发生故障,则可能是传输错误,或者是用户试图作弊。无论哪种情况,程序都应显示一条消息,指出资产文件已损坏,然后退出。

或者,您可以选择从互联网上下载资产的原始副本(如果有下载服务器)。但是为了避免客户支持的噩梦,请确保在下载千兆字节的数据之前先进行询问


[1]现实看起来可能有所不同,您甚至可能会发现制造商“应该知道”的AAA冠军头衔缺失的资产,但它们通常都有不切实际的截止日期,而且团队规模也不断变化。理想情况下,您运送的所有物品均已通过自动化管道,并保证是完整的。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.