【问题标题】:how is game saving implemented so that the developer can avoid creating a god class/object?如何实现游戏保存以便开发人员可以避免创建上帝类/对象?
【发布时间】:2013-03-25 19:53:39
【问题描述】:
昨天在玩电子游戏的时候突然想到一个问题,游戏保存机制是怎么实现的?
大多数情况下,保存需要游戏的所有数据。在这种情况下,程序员不是必须制作一个引用每一个游戏数据的上帝对象吗?
我在 SO 而不是游戏开发上发布问题,因为我想要基于软件设计而不是游戏开发本身的答案。
【问题讨论】:
标签:
game-engine
software-design
god-object
【解决方案1】:
您应该记住的一件事是,您只需要存储重要的数据。例如,这可能包括库存内容(可能是 ID 和数量列表)、玩家位置和关键任务位(您是否已经从被禁止的冰箱中获得了附魔芹菜?)。这可以使用Memento 模式之类的东西来实现,尽管实际上它通常只是一个序列化到磁盘的结构(或等效结构)。
您不需要保存整个世界状态,因为关卡加载器通常会负责项目/实体在世界中的放置。如果你仔细看,你会发现恢复存档并不一定要恢复世界上所有事物的准确状态——只有重要的部分。这是一种在游戏中经常使用的心理技巧。
保存文件的其他一些注意事项可能包括用于检测保存文件篡改的哈希或校验和,或存储运行时 RNG 用于在游戏加载后创建相同系列事件/实体的种子值。
基本上,您实际上不需要保存世界状态的每一点 - 只是玩家可能关心的部分 :-)