问题描述:
我下了个游戏压缩包,解压以后全部都是白色的带WINDOWS符号的文件(diz还有别的)没有运行程序,也没有bin sio文件,这种情况不只遇到一次了,难道说不能玩吗,要怎样才能玩啊~~请高手指点一下!!
解析:
不是病毒就是没用的程序
一般rar zip 格式下 游戏就压缩成安装包或者是压缩包
希望你再话点世界下个好点的
有一偏文章正好你看
游戏中如何读取压缩包文件 --------------------------------------------------------------------------------
页面地址是ynuit/ynuit/2005-10-17/article_view_770
--------------------------------------------------------------------
我们在市场上买了一个游戏,很少会轻易的看到游戏目录里一堆的BMP,PCX资源。难道他们不使用BMP之类的文件作为资源吗?非也,其实他们把这些资源进行了打包、压缩。
举几个游戏的例子吧,大名鼎鼎westernwood的《红色警戒》的mix文件就是一种压缩包,里面包含了一堆堆的游戏,声音等资源。还有blizzard的《星际争霸》、《暗黑破坏神》、《魔兽系列》的mpq文件也是一种压缩包,里面包含了各种游戏使用的资源。几乎所有的游戏都用到了压缩包。
那么为什么要使用这种压缩包呢?原因很多,首先就是压缩,游戏中使用的等资源都是极其适合压缩的,这样就减小了游戏的体积。如果把《红色警戒2》的资源全部解开相信会超过3G。其次压缩后文件体积的减小会带来读盘速度的显著提高。通常一个2M的BMP文件可以被压缩到700K以内,读取一个2M的文件和读取一个700K的文件然后再内存中解压的速度对比是可想而知的。最后,将大量的资源文件打包能使得游戏目录清晰,而不是一堆堆的文件夹和文件,这样能减少磁盘空间的浪费,也减少了磁盘碎片。
说了那么多压缩包的好处,我们在游戏中到底怎么使用压缩包呢?
1.我们需要定义我们自己的压缩包文件存储格式。
2.根据1我们写一个压缩工具来对游戏中的资源进行压缩存储。
3.根据1我们写一个解压缩的库以便我们游戏中使用。
4.在游戏的代码中,我们调用这个库,来读取我们包中的文件。
看到这儿,似乎我们需要做的工作还是很多、很复杂的。要定义一个文件结构,又要写压缩工具、还要写解压库。而我们真正使用确实在最后一步,而且是简单的调用一个库而已。似乎有点得不偿失了。好了,我们现在要找一条捷径来完成我们游戏使用压缩包的问题,对于1和2来说其实很好办,现成的就有很多压缩软件可以生成压缩包,winzip,winrar,winace ……都是非常好的压缩工具,这样我们不用定义压缩包的存储格式,也不用编写压缩工具。不费任何力气就完成了1和2两步。那么第3步又如何呢?文件存储格式不是我们设计的,我们无法知道文件是如何组织、如何压缩的,跟不用说知道如何压缩了。不过上网搜索一下,我们还是能得到一些winzip,winrar格式的解压缩源代码的。不过研究起这些代码来又是件痛苦的事情,更何况还要用在自己的游戏里。
到这里,我们又遇到了严峻的考验,现在我向大家隆重介绍我们的压轴法宝:MDFile文件系统。那么,MDFile是个什么东东呢?MDFile是一个可扩展的文件 *** 作库,可以用最最简单的方法实现对任意压缩包格式内文件的读取。那么到此,我们的3和4也都可以实现了。下面我们就以MDFile为例来说以下怎么使用它来读取我们包中的文件。
首先我们先获取我们需要的MDFile库,到中国游戏开发技术咨询网上下载MDFile库,点击本站原创,找到MDFile并下载下来。
将库放到你的工程中,并设置好,这里我就不详细说如何设置一个外部的库了,如果不会的话你可以参考相关的书。好了,下面我们就开始我们的代码了,这里以读取testzip中的一个testtxt文件为例:
我们在程序中添加一个LoadFile的函数来载入一个包里的文件。
bool LoadFile(char filename,char packfile)
BYTE buf=NULL; 用来存放读取出的文件的内容
CMD_File cmdfile(“ZipExtdll”); 我们先生成一个实例
cmdfileOpen(“testzip”,true,true); 打开testzip这个压缩包
cmdfileLocate(“testtxt”); 定位到testtxt文件
buf=new BYTE[cmdfileGetLength()]; 根据testtxt的大小分配内存
cmdfileRead(buf); 读取文件到我们的内存中
至此,buf中已经存储了我们需要的testzip中的testtxt文件的内容了
是不是很简单呢?
细心的朋友可能已经注意到了,CMD_File cmdfile(“ZipExtdll”);
这个初始化是什么意思呢?就是用ZipExtdll这个扩展库来打开我们的testzip文件,因为MDFile本身并不支持Zip格式,他支持内部的一种叫epk的压缩包格式,为了让他支持Zip你必须获得ZipExtdll这个扩展库,同样的如果你需要Rar支持你需要获得RarExtdll这个扩展库。好在我们刚下载的MDFile包中已经包括了一个ZipExtdll(在Sample\Sample4\Release中),也好在@J--S Studio在不停的开发MDFile的扩展库,以便我们能够使用更多的压缩包格式。
需要一提的是:使用这些现成的压缩软件制作文件包虽然简单,但是也有很多问题,例如安全性,有时候我们不想被其他人看到游戏中用到的资源,这时如果我们用的是Zip格式,那就可能轻易的被别人解开并修改了。这时,其实使用MDFile内部的epk格式就比较好,他使用动态加密技术,同时epk格式不被其他压缩软件支持,另外他的其他一些特性都是非常不错的。同时为了支持epk格式,他还提供了一个JSFilePacker程序用来打包需要的文件并存成epk格式。所有的这些都可以在我们下载的MDFile中得到。 (JSFilePacker在tools下)
立即下载MDFile库 devgameres/Program/Other/MDFilezippack就是整理内存的,
原理是它先将变量保存到一个mat文件里,然后整理内存,然后导入先前存的mat文件到工作区间,然后删掉它,
用法:
pack
默认把mat保存到当前文件夹
pack
filename
pack('filename')
是把mat文件保存到你指定的文件夹
为什么我们看不到mat文件呢?
因为函数执行很快,并且最后删掉了它,
当出现out
of
memory(内存溢出)
是经常用到,
希望对你有帮助428位粉丝
1、将自己制作的pack文件用PackFileManager或RustedPackFileManager打开,将“pack”类型改成“mod”。
2、修改好类别之后,保存,然后将pack文件放到游戏目录下的“data”文件夹里面接下来准备一张封面图,一样复制到“data”文件夹下面,文件名称命名为和pack文件一样,用steam打开游戏,选择“模组管理器”,然后就可以在这里进行上传了。点击File,open,然后找你需要的文件,你可以根据名字排序,即点击REC和PATH之间的那一个,接着点击Action,exact或者exact to到指定文件夹,我用的是BSA Browser,也是解包工具pack() - 类 javaawtWindow 中的方法调整此窗口的大小,以适合其子组件的首选大小和布局。pack(JarFile, OutputStream) - 接口 javautiljarPack200Packer 中的方法接收 JarFile 并将其转换为 Pack200 存档。pack(JarInputStream, OutputStream) - 接口 javautiljarPack200Packer 中的方法接收 JarInputStream 并将其转换成 Pack200 存档。pack() - 类 javaxswingJInternalFrame 中的方法使此 JInternalFrame 的子组件按其首选大小进行布局。pack() - 类 javaxswingJPopupMenu 中的方法布置容器,让它使用显示其内容所需的最小空间。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)