我正在制作一个开放世界的单人RPG游戏,其中世界主要由孤立区域组成,其可扩展性分为几个部分。世界包含彼此相互作用的生物。大多数生物都会提到其他生物,可能包括其他地区的生物。 being
的类定义可能类似于
class Being {
weak_ptr<Being> target;
// other members
};
当然,我需要能够在磁盘上保存和加载游戏状态。现在,我不想让所有生物一直装满。我只想加载那些靠近玩家的生物,或者最坏的情况是加载当前加载区域内的所有生物。实现这一目标的好策略是什么?以下是我到目前为止所提出的一些想法。
这些选项有更好的替代方案吗?我想这是一个常见问题,但我无法在SO上找到相关问题。
答案 0 :(得分:1)
您可以使用类似Flyweight Pattern的内容来帮助您执行此操作。然后每种类型的存储实际上只加载一次(可以在需要的时候懒得完成),然后每个存在实例只包含特定于实例的变量,如位置,速度等。
如果这还不够节省,您可以编写一个具有API的实例管理器,用于请求指向存在的引用计数指针。引用对象将在实例管理器被销毁时通知它。这将使参考管理员可以根据需要轻松地将Beings与磁盘进行编组。