不知道大大们有没有玩过火炬之光,我一直都不懂其中的一些奥秘,
其中有一个东东,就是它的资源文件放在了一个zip压缩包中,
问题:
那么它为什么可以在游戏中很短的时间内把所需要的资源读取出来的?然后放到游戏中去,我在玩的时候好像也没有发现临时文件啊。即时读取zip文件?好像连解压的过程都没有?
为什么
这是怎么做到的?

解决方案 »

  1.   

    系统默认是支持ZIP文件的吧 比如你安装原版的XP系统 没安装任何解压软件的时候ZIP文件在系统中就是以一个文件夹的形式呈现的。
      

  2.   

    系统自带ZIP的解压程序,读取的时候就想读取文件夹一样方便。你可以设置下你的压缩工具,让压缩工具不支持zip文件,然后建一个zip文件双击它,就会像打开文件夹一样打开。
      

  3.   

    我估计也是在内存中解压的,但关键是,谁知道用什么api来解压?或是什么算法?
    我在网上搜了很久很久也就是什么解压库之类的,并没有找到直接在内存中解压的相关资料就算有C++代码也好啊
    或者有没懂的人啊?给一些相关的提示什么的也好啊
      

  4.   

    gzip算法本身微软已经做到框架里面了所以你不需要管具体算法,直接使用就是了相关说明
    http://msdn.microsoft.com/en-us/library/system.io.compression.gzipstream.aspx
      

  5.   

    实际你看上面msdn的说明就知道了他主要提供的是对Stream流的操作,而Stream流则无所谓是神马方式,内存流他也是流,文件流他也是流。操作上没有区别
      

  6.   

    游戏Loading的时候,游戏资源文件加载到内存中
      

  7.   

    不需要特定的解压到某处,直接解压提取加载到内存,所以切换关卡,会有loading即使使用的不是zip压缩,是别的压缩,都可以在游戏中代码实现解压提取。
    因为压缩包是游戏给的,算法也是
      

  8.   

    gzip我用过,好像有问题的(在.net 2.0中压缩两次文件体积反而变大,而且只能对单个文件进行解,压缩),另外,比如我有一个8G的文件 “Game.zip”那这八个G我如何在内存中解压呢?
    我怎么知道其中哪些资源文件在整个文件的什么位置呢?
    我要怎么读取这个400m文件的一部分呢?因为我不可能把这400m全部加载到内存里面啊!
      

  9.   

    貌似lz 说的有道理!
    很大的文件是不可能在内存里解压的!
    我估计zip可能只是个假象!人家是直接读取里面的内容的