大多数游戏都将其资源(模型,纹理等)打包到特殊文件中(例如Quake 3中的.pk3文件)。显然,这些文件以某种方式被“挂载”并被用作好像它们是单独的文件系统。
我想知道这是如何实现的。到目前为止我提出的唯一策略是在文件头中放置偏移大小的信息,然后对文件进行内存映射并访问资源,就好像它们是独立的写保护内存块一样。
我想知道我的策略是否可行以及是否有更好的选择。
谢谢!
答案 0 :(得分:3)
你的策略很合理;事实上,它与文件系统驱动程序对原始块设备的作用完全相同。你对这个实现有什么问题?
答案 1 :(得分:3)
你的方法听起来很合理。基本上,您将拥有带(可选)元数据的ISAM文件。您可以根据条件(内容类型,使用频率,使用地点等)将文件拆分为多个部分("目录"),并为每个部分分别创建索引/目录。如果您允许某个部分作为内容类型,那么您可以嵌套它们并以一致的方式处理它们。
如果您的要求非常基本,您可以考虑简单地使用zip / tar文件作为容器。无论如何,查看这些代码可能是一个很好的起点。
答案 2 :(得分:3)
我不能说Quake3的确切格式,但有几种方法可以满足您的需求:
每种方法都有自己的strengths and weaknesses。
我们的SolFS产品是上面提到的虚拟文件系统的一个示例。它专为与您类似的任务而设计。
档案和一些复合文件实现通常具有线性顺序结构 - 文件一个接一个地写入,文件的开头或末尾有一些目录。
某些复合文件实现,数据库和虚拟文件系统具有基于页面的结构(“页面”类似于FAT或NTFS中的扇区或群集),其中文件可以分散在存储中。