前段时间写了CQuartzFileUnZip 0.3这个类,不过发现好多人不会用,今天写一个例题来解释一下这个工具的使用方法:
1.把资源打包
首先,运行QuartzFilePackEdit 0.4.exe (刚上传的版本)
运行界面打开以后,就可以通过"添加资源",向文件列表中添加资源。
这个是我今天刚刚写的,新增加了打开对话框中,一次可以选取多个文件的功能。这样整个文件夹的问加载就变得简单了。目前还不提供再压缩文件中支持文件夹的功能。
要注意一点,就是压缩文件中最好不要出现中文,以免你在QFT包中无法正确的读取到资源。
接下来文件打包保存成*.Qft文件,这样,这个文件包内会自动产生文件列表,如果你怕忘了里面的文件了,那就把文件列表导出来,点选“导出文件表”再打包,那么就会有一个index.txt文件在*.Qft同级目录中,其中保存了文件列表。下一个版本我准备再增加一个打开*.Qft文件的功能,可以向已经打好包的资源中追加新的资源;目前还在构思数据结构,大家耐心等待,呵呵
2.在代码中解析资源
刚才已经把资源都压缩到*.Qft文件中去了,那么接下来的工作就是把里面的资源读到我们的游戏中去。CQuartzFileUnZip这个类最大的好处就是不用把文件从压缩包中解压出来,而是直接读取资源文件本身,这样要对里面不同类型的数据文件的格式要进行数据分类和提取,这个工作目前封装在类中,都帮你做好了。只需要在你的程序中直接读取资源就好了
我们用一个D3D例题 来看看怎么使用CQuartzFileUnZip(要在附加依赖项中添加"QuartzFTeX.lib"):
以上代码就是D3D标准的3D例题,其中修改代码的地方有:
CQuartzFileUnZip g_MDFile; //CQuartzFileUnZip类型数据
std::list<XFILEINFO*> g_xinfo; //保存.x文件信息的,里面包含了纹理,还有用到的材质。
在开始的时候,需要对g_MDFile初始化,因为用到的都是d3d的资源,先传入D3d设备指针。
g_MDFile.Init(g_pd3dDevice);
接下来读取资源
//********通过CMD来或其Qft文件内部的图片********
g_MDFile.OpenSourceFromFile("test.QFT","");
//读取*.QFT内部的纹理
if(!g_MDFile.GetTextureByName("1231.png",g_pTexture)) //参数解释:(文件名, 纹理指针)
return false;
//读取*.QFT内部的静态.x文件
if(!g_MDFile.GetMeshByName("tiger.X",g_pMesh,g_xinfo)) //参数解释:(文件名, mesh指针, 存放.x文件的信息容器)
return false;
读取动态的.x文件已经写好了,因为还要涉及到骨骼动画这块比较麻烦,等我封装好一个类一块拿出来;
剩下的就是渲染了,对于.x文件的渲染只需要下面的办法就可以了:
std::list<XFILEINFO*>::iterator it = g_xinfo.begin();
for( DWORD i=0; i<g_xinfo.size(); i++,++it )
{
// Set the material and texture for this subset
g_pd3dDevice->SetMaterial( (*it)->pd3dxMaterials );
g_pd3dDevice->SetTexture( 0, (*it)->pTexture);
// Draw the mesh subset
g_pMesh->DrawSubset( i );
}
------------------------------------------------------------------------------
如果要渲染纹理,就增加一个面,把纹理贴上去就行了~~这个类尽量的提供的数据都是原始数据,目的是为了让你原来的项目代码只有尽少的改动。
3.程序的运行
要运行程序,必须注意,需要在你的项目文件夹中包含MD_File.dll,QuartzFTeX.dll两个动态链接库,这两个库分别是读取文件内指针的方法和对数据进行解压的方法。刚才代码我已经测试通过了,如果还有什么问题的话,可以留言给我~~
0.5.11版本下载(如果地址失效请留下mail)
http://u.sohu.com/download/11/13263401304527265414057
http://download.csdn.net/source/2300197