【发布时间】:2018-12-19 06:07:30
【问题描述】:
我曾经使用serialize objects states and save them to a database(或 XML 文件)稍后加载,但我不知道某些游戏如何在没有大量保存操作或后台预定自动保存的情况下随时保持游戏状态。我在 C# + unity3d 中使用了 File.WriteAllBytes 和 File.ReadAllBytes,我在使用 Java serialization 时也有类似的经验,但它们都非常耗时并且需要几秒钟的时间来编写数据到文件或数据库中。
在一些城市管理游戏中,每次我关闭游戏时它都会立即关闭,并且没有像在简单游戏中那样在关闭后无聊的保存和后台进程。游戏中的角色太多了,我注意到他们后来被所有的小细节和不完整的笑声加载了!我想知道如何在任何时候立即保存这么多的数据?
是否有增强的算法可以每次都保持过多字符的实时状态?
【问题讨论】:
-
根据我的点点滴滴的经验,我建议通过所有艰苦的工作来完成,包括使用优化的专有二进制格式并尽可能避免在保存过程中分配内存,以及作为小优化,例如提前打开文件句柄并保留它。
-
XML 和数据库对于即时存储和加载游戏状态非常低效。二进制序列化是要走的路。除此之外,没有理由不将此类工作卸载到后台线程并使用您提到的方法的异步版本。除了用户@Zyl 提到的内容外,如果您对保存哪些数据以及如何(以及何时)保存数据很了解,那么存储游戏状态真的不必很慢。
标签: c# algorithm unity3d savestate autosave