昨天在玩电子游戏的时候突然想到一个问题,游戏保存机制是怎么实现的?
大多数情况下,保存需要游戏的所有数据。在这种情况下,程序员不是必须制作一个引用每一个游戏数据的上帝对象吗?
我在这里发布问题而不是游戏开发,因为我想要基于软件设计而不是游戏开发本身的答案。
昨天在玩电子游戏的时候突然想到一个问题,游戏保存机制是怎么实现的?
大多数情况下,保存需要游戏的所有数据。在这种情况下,程序员不是必须制作一个引用每一个游戏数据的上帝对象吗?
我在这里发布问题而不是游戏开发,因为我想要基于软件设计而不是游戏开发本身的答案。
您应该记住的一件事是您只需要存储重要的数据。例如,这可能包括库存内容(可能是 ID 和数量的列表)、玩家位置和关键任务位(您是否已经从被禁止的冰箱中获得了魔法芹菜?)。这可以用类似Memento模式的东西来实现,尽管在实践中它通常只是一个序列化到磁盘的结构(或等价物)。
您不需要保存整个世界状态,因为关卡加载器通常会负责项目/实体在世界中的放置。如果你仔细看,你会发现恢复存档并不一定要恢复世界上所有事物的准确状态——只有重要的部分。这是一种在游戏中经常使用的心理技巧。
保存文件的其他一些注意事项可能包括用于检测保存文件篡改的哈希或校验和,或存储运行时RNG将用于在游戏加载后创建相同系列事件/实体的种子值。
基本上,您实际上并不需要保存世界状态的每一点 - 只是玩家可能关心的部分:-)