这似乎是游戏使用的一种技术,它将所有声音都放在一个文件中,纹理放在另一个文件中.这些文件通常达到GB大小.
这样做的原因是如何将子目录中的所有内容保存为小文件 - 许多小型游戏使用这种格式的一个,整体系统受到大公司的青睐?
是否有一些文件系统开销有很多小文件?他们是否试图保护自己的财产 - 尽管大多数似乎只是一个带有新扩展名的压缩文件?
我们使用像我这样工作的"归档"系统(游戏开发公司)的原因:
hash( normalized_filename ) -> [ offset, size ],我们可以非常快速地查找文件.我们还可以将此索引保留在RAM中,可能会将其与其他索引表等交错..arc,或者我们可以存储文件名列表,文件散列名列表,或者只是某处[offset,size]对的列表 - - 甚至可能作为档案中的文件.这通常比FS上的目录遍历更快.)但这些是世俗的原因.更有趣的东西:
每个都.arc在列表中注册,并尝试打开文件,知道查看弧.我们首先搜索已经在RAM中的存档,然后在设备FS上存档,然后在实际设备FS上存档.这给了我们很大的灵活性:
.wad系统就是上述的一个例子,它允许模组更容易地覆盖游戏中内置的资产和脚本.)bin2obj直接在可执行文件(.rodata)中嵌入整个弧,此时您不需要查看设备FS - 我们为某些小型演示版本执行此操作等等.我们也可以通过网络发送关卡或以这种方式savegame-sneakernet.=)我们最近将PC游戏移植到FS访问速度慢得多的系统.我们没有改变数据格式,结果是在原始设备FS上通过dir迭代加载了一百个小的XML文件,这绝对会扼杀我们的加载时间.我们使用的解决方案是获取每个目录,使其成为自己的目录,并将其subdir.arc粘贴在主game.arc压缩中.当需要dir(类似于opendir)时,我们将整个subdir.arc解压缩到RAM中,将其添加到文件系统中,然后超级快速地迭代它.
它能够在几个小时内将这样的东西放在一起,并减轻跨系统移植的痛苦,这使得这样的东西值得.
| 归档时间: |
|
| 查看次数: |
864 次 |
| 最近记录: |