当前位置:  开发笔记 > 编程语言 > 正文

视频游戏如何有效地存储/检索大量数据?

如何解决《视频游戏如何有效地存储/检索大量数据?》经验,为你挑选了3个好方法。

例如,在辐射3中,保存游戏存储游戏中每个对象和NPC的状态和位置,并且仅占用几MB.他们是怎么做到的!?!?

然后,在游戏过程中,如何在内存中添加/检索这些数据,以便可以实时显示给玩家?

更新:(我打算让你为你的答案工作:P)

基于Kevin Crowell的答案...所以我猜你会有一个适用于对象和NPC的渲染距离,你会在给定范围内"选择"对象和NPC.但是,您将使用什么类型的数据存储来获取这些对象?

换句话说,你会在游戏中拥有一个巨大的每个对象数组,并不断更新一个包含要呈现的可见对象的较小列表吗?

另外,根据Chaos的回答......如果你最终触及游戏中的每一个物体,会发生什么?你的拯救游戏会变得越来越大吗?在辐射3的情况下,我很确定没有"阶段",过去的数据可能会被删除.当您离开/返回某个位置时,一切都会持续存在.那么您认为这个具体案例是如何实施的?



1> MSalters..:

现在有了所有的大硬盘,甚至开发人员似乎也忘记了兆字节中有多少字节.所以回答标题中的问题:游戏通过创建几兆字节的存档来存储大量数据.

为了说明一兆字节有多大,它是800万比特.这足以编码2 ^ 8000000 = 10 ^ 2666666个状态.相比之下,宇宙中只有10 ^ 80个原子.现在在(保存)游戏中有多个子系统具有不同的状态; 例如,在RPG中,每个NPC都有自己的状态.但是,有多少国家,真的吗?他们在一个城镇的位置可能会被保存为16位(你还记得他们的确切位置,如果他们还是四处走动吗?).他们的情绪/性格/等等是另外8位,这使得一些人拥有更多的情绪.

在游戏中存储这种数据时,典型的数据结构是QuadTree.这是一个数据结构,允许您在O(log N)中确定某个XY区域中的对象.在某些情况下,游戏开发人员发现在区域中对世界进行预分区更容易.这减少了运行时计算量.毁灭战士就是一个很好的例子.它的地图具有预先计算的可见度; 对于每个点,可以快速确定它属于哪个区域,并且对于每个区域,预先计算可见对象的数量.这减少了需要运行时可见性检查的对象数量.


实际上,在我们的银河系中是10 ^ 69.实际上,确切的边界并不重要.出于多种原因,在10 ^ 80估计中存在大量误差.

2> Kevin Crowel..:

它可以简单地将对象或NPC映射到X,Y,Z坐标平面.那些便宜存储的信息.

在游戏过程中,所有这些对象仍然始终映射到坐标系.他们只需要读取保存信息并从那里开始.


+1因为你(当时)的分数是723

3> Chad Birch..:

我认为你高估了存储/检索内容的复杂性.您不需要存储对象或其纹理的3D模型,也不需要存储构成游戏大小的磁盘大小的任何东西.

首先,正如提到的混乱,只需要存储有关已移动事物的信息.即使这样,你可能只需要为每一个存储新的位置和方向(假设没有涉及其他变量,比如"损坏").这就是每个对象的两个向量,每个对象的总共大约24个字节.这意味着您可以存储每兆字节40,000个对象的信息.这是移动的很多物体.

恢复此数据并不比首先放置对象复杂.每个对象必须具有为游戏定义的默认位置/方向以将其放置在某个位置,因此您所做的只是将默认值替换为保存文件中的存储值.这并不复杂,也不需要任何重要的额外处理.

推荐阅读
家具销售_903
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有