从大文本文件中快速读取特定字节的数据

时间:2014-08-14 15:03:58

标签: file-io format save loading game-engine

为了论证,假设您有一个巨大的文件来保存地图保存数据。作为一个很好的例子,想到的游戏是Terraria。它们将所有MapWidth * MapHeight平铺数据保存在单个地图文件中(实际上很糟糕)但是它们只能根据相机位置渲染相机内部可见的内容(以及一些外部平铺的平滑度)。

所以我的问题是,“他们如何从相机位置开始实时搜索所有数据?”

这需要阅读潜在的数百万个磁贴数据才能到达屏幕坐标。据我所知,如果图块数据是一致的,你可以根据x / y坐标跳过数据字节(这是我在一周左右的搜索中找到的所有内容),但这就是我的问题所在。图块数据是动态的。如果一个tile为空,则“isValid”之外的数据不存在。这样可以搜索更少的字节数。如果一个图块有水,多个状态,一个背景等......它包含所有数据,并且在字节方面是最大的。所以它根本不是常数。在这种情况下,我们不能在它改变时跳过X字节量(不断修改瓦片)。

我目前的解决方案是:逐行读取(Ugh),使用块文件,或确保固定行大小(填充?数据浪费......呃)。

我知道块是最好的选择,但能够快速深入到文本文件中仍然是一件好事。

1 个答案:

答案 0 :(得分:0)

如果你有基于块的数据,你需要一个基于块的阅读器,就这么简单。

此外,如果您仅对数据的某些部分特别感兴趣并且可以先处理它,则构建第二个文件/列表,将偏移量存储到第一个文件中每个对象的开头。

在这种情况下,每当需要引用一个对象时,首先查找偏移量,然后在原始文件中直接跳转到该对象。它仍然需要你至少阅读整个文件一次。