还有kuratatsu的打包kindle人社区资源打包么??

资源打包吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧排名:
本吧签到人数:8成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:915贴子:
各种资源打包发送
【求书】慕璎珞《唯魔独尊》TXT全本 谢谢谢谢谢谢谢谢亲啊~急需~@.com
这里是梳子,这是分贴,之前在打包吧来了一个。 无格式,大家喜欢就好~
直接链接/disk/home#dir/path=%2F%E6%88%91%E7%9A%84%E6 留言就好,标准十五字
这里是资源打包吧水帖处,大家随意水,刷经验吧 另开水帖的,一经发现,立即删除
我的邮件内容 内容有图有真相 有需要的朋友请留邮 如有文件相同请自动忽略 不喜勿喷 有效期 30天!! 截止5月27日晚!!
吼吼,资源分享,长期在线,有空就会发的哦~~~ 露珠只会发给本吧吧友们,大家要资源的话请留下正确QQ邮箱,也请不要楼中楼,因为楼主一般不会关注楼中
黛眉浅 瑾花残 紫陌红尘几生缘 图片来自:s苏倾颜的百度相册图片来自:s苏倾颜的百度相册图片来自:s苏倾颜的百度相册图片来自:s苏倾颜的百度相册图
【惯例】一楼百度 清欢共,紫陌红尘相逢;望苍穹,掠眼繁华谁懂。 我是梨子 百度ID:水恋若紫
【惯例】一楼百度 清欢共,紫陌红尘相逢;望苍穹,掠眼繁华谁懂。 我是梨子 百度ID:水恋若紫
送图,留下邮箱,马上发送 喜欢可以粉个哈~
如题:送资源,61本好看的NP穿越小说 有图为证
恩 收集的各种网盘资源 持续更新 别留邮箱 不发送 自己点进去下载就可以了
相信微哥,微哥的书都是好书 /lb/5lba36k466op# 好文,杂文合集 115网盘礼包 ~\(≥▽≤)/~啦啦啦 来吧来吧 去下载吧 再说我伸手党我和
【惯例】一楼百度 清欢共,紫陌红尘相逢;望苍穹,掠眼繁华谁懂。 我是梨子 百度ID:水恋若紫
直接留邮箱 强大的素材包让你把持不住
资源分享,长期在线,有空就发 只发给本吧吧友们, 大家要资源的话请留下正确QQ邮箱, 不要楼中楼, PS:希望大家能给十五字,不强求粉不粉
如题:有图为证
有图为证 喜欢的请留邮。
发给我的我粉你一个不是事
参加过吗?一大波妹子、T豆等你来抢呢!
【惯例】一楼百度 清欢共,紫陌红尘相逢;望苍穹,掠眼繁华谁懂。 我是梨子 百度ID:水恋若紫
名字叫(想念,却不想见的人)txt。请好心人给我发邮箱
看见有人说想学PS 所以就发一些关于PS教程的资源 有视频 也有详细文字和图教程 唔 都是些基本的教程 如果是PS高手请绕道哦
【惯例】一楼百度 清欢共,紫陌红尘相逢;望苍穹,掠眼繁华谁懂。 我是梨子 百度ID:水恋若紫
欢迎加入群,各类小说资源都有哦
【惯例】一楼百度 清欢共,紫陌红尘相逢;望苍穹,掠眼繁华谁懂。 我是梨子 百度ID:水恋若紫
【惯例】一楼百度 清欢共,紫陌红尘相逢;望苍穹,掠眼繁华谁懂。 我是梨子 百度ID:水恋若紫
跪求折火一夏的全部小说,发送到,感激不尽
【惯例】一楼百度 清欢共,紫陌红尘相逢;望苍穹,掠眼繁华谁懂。 我是梨子 百度ID:水恋若紫
大量回收古籍,金瓶梅一类的就算了,其他的内容不限,年代不限,类别不限。有的大大麻烦发到我邮箱@.qq.com 有发必粉,发了的麻烦在此留下
大家可以在这个刷刷
都市也不挑剔,常见的就算了,书荒了,最好下载就可以看的,压缩包什么的最讨厌了。
/QXCwZivUaFTe8
老同学@月月月半小夜曲 求关注
各种资源集合~网盘下载 勿留邮箱
嗨,各位同道者:求小说,女主修仙,重生,空间,穿越,高干,腹黑,女强。。。。和好听的歌曲:英文歌,欧美歌曲,古典歌曲。。等等
一楼送度娘,送常驻
【惯例】一楼百度 清欢共,紫陌红尘相逢;望苍穹,掠眼繁华谁懂。 我是梨子 百度ID:水恋若紫
【惯例】一楼百度 清欢共,紫陌红尘相逢;望苍穹,掠眼繁华谁懂。 我是梨子 百度ID:水恋若紫
【惯例】一楼百度 清欢共,紫陌红尘相逢;望苍穹,掠眼繁华谁懂。 我是梨子 百度ID:水恋若紫
内&&容:使用签名档&&评论-3491&
trackbacks-6
&&&&出于安全以及移植考虑,近两天有看关于WebResource方面的资料,有点点心得和不明白。这里鄙视下那些狂抄袭的论坛和博客,一搜索几乎全一样,也没多说一个字的!!
&&&&1.&&&&直到这个例子出现,我才真正做出自己想要的东西,但是也带来了一些不明白
&&&&2.&&&&这篇文章给了我基础代码
&&&&3.&&&&这是一篇好文章,虽然没有用到,但是值得推荐
&&&&先看下我的最终的目录结构(这是工程结构就是&英文原站下载的代码):
&&&&这里需要说明几点:
&&&&1.&&&&对于以下这行资源注册代码放在AssemblyInfo.cs中和放在DLL中任何类的namespace前效果是一样的。(我个人建议统一放在AssemblyInfo.cs中便于统一管理)
[assembly:&WebResource("FunkyTextBox.Resources.test.jpg",&"image/jpeg")]
&&&&2.&&&&资源文件在DLL中的位置和访问是有关系的!!我把图上test.jpg放在根目录和放在Resources目录下访问起来是不一样的,注册资源的时候就是根据这个来(也就是说如果放在根目录的话注册资源的名称就是"FunkyTextBox.test.jpg")。
&&&&现在我们先分析FunkyTextBox他原来的代码架构,也是很多网上示例的架构:
&&&&1.&&&&把资源文件拷贝到项目中
&&&&2.&&&&编写自己的用户控件,继承WebControl如TextBox,也就是说在DLL内部调用资源文件
&&&&3.&&&&在用户控件中注册资源(也可以在AssemblyInfo.cs中)
&&&&基本上看到的都是在DLL内部调用资源文件然后再从外部引用该自定义控件。这里我主要讨论的是想在外部直接引用DLL内部的资源文件,相信很多朋友和我一样,把DLL内部引用资源文件的代码复制出来拷贝到ASPX里面图片怎么都出不来,包括注册httphandles里面截获WebResource.axd也不管用。直到在MSDN上看到那段代码才有所感悟:
using&System.W
using&System.Web.UI;
using&System.Security.P
[assembly:&WebResource("Samples.AspNet.CS.Controls.script_include.js",&"application/x-javascript")]
namespace&Samples.AspNet.CS.Controls
&&&&[AspNetHostingPermission(SecurityAction.Demand,&Level&=&AspNetHostingPermissionLevel.Minimal)]
&&&&public&class&ClientScriptResourceLabel
&&&&&&&&//&Class&code&goes&here.
&%@&Page&Language="C#"%&
&%@&Import&Namespace="Samples.AspNet.CS.Controls"&%&
&!DOCTYPE&html&PUBLIC&"-//W3C//DTD&XHTML&1.0&Transitional//EN"
&&&&"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&
&script&runat="server"&
&&public&void&Page_Load(Object&sender,&EventArgs&e)
&&&&//&Define&the&resource&name&and&type.
&&&&String&rsname&=&"Samples.AspNet.CS.Controls.script_include.js";
&&&&Type&rstype&=&typeof(ClientScriptResourceLabel);
&&&&//&Get&a&ClientScriptManager&reference&from&the&Page&class.
&&&&ClientScriptManager&cs&=&Page.ClientS
&&&&//&Write&out&the&web&resource&url.
&&&&ResourcePath.InnerHtml&=&cs.GetWebResourceUrl(rstype,&rsname);
&&&&//&Register&the&client&resource&with&the&page.
&&&&cs.RegisterClientScriptResource(rstype,&rsname);
&&&&&title&ClientScriptManager&Example&/title&
&&&&&&form&id="Form1"&runat="server"&
&&&&&The&web&resource&path&is&
&&&&&&span&&id="ResourcePath"&runat="server"/&.
&&&&&&br&/&&br&/&
&&&&&&input&type="text"&id="Message"&/&&&&&&
&&&&&&input&type="button"&onclick="DoClick()"&value="ClientClick"&/&
&&&&&&/form&
为了方便直接看到效果,我把上面从DLL中读取JS的代码改成了从DLL中读取图片的代码,改动如下
1.&&&&将ClientScriptResourceLabel命名空间改为FunkyTextBox
2.&&&&将资源注册代码改成如下(注意资源路径):
[assembly:&WebResource("FunkyTextBox.Resources.test.jpg",&"image/jpeg")]
3.&&&&为ASPX页面添加一个图片按钮并把读取的相应改成如下:
&script&runat="server"&
&&&&public&void&Page_Load(Object&sender,&EventArgs&e)
&&&&&&&&//&Define&the&resource&name&and&type.
&&&&&&&&String&rsname&=&"FunkyTextBox.Resources.test.jpg";
&&&&&&&&Type&rstype&=&typeof(ClientScriptResourceLabel);
&&&&&&&&//&Get&a&ClientScriptManager&reference&from&the&Page&class.
&&&&&&&&ClientScriptManager&cs&=&Page.ClientS
&&&&&&&&//&Write&out&the&web&resource&url.
&&&&&&&&imgpath.Src&=&cs.GetWebResourceUrl(rstype,&rsname);
&&&&&&&&//ResourcePath.InnerHtml&=
&&&&&&&&//&Register&the&client&resource&with&the&page.
&&&&&&&&//cs.RegisterClientScriptResource(rstype,&rsname);
&html&xmlns="http://www.w3.org/1999/xhtml"&&
&head&runat="server"&
&&&&&title&WebResources&/title&
&&&&&form&id="form1"&runat="server"&
&&&&&img&runat="server"&id="imgpath"&alt=""/&
&&&&上面访问代码可以简化如下:
mgpath.Src&=&ClientScript.GetWebResourceUrl(typeof(FunkyTextBox),&"FunkyTextBox.Resources.test.jpg");
&&&&由上面的代码我们可以看得出,ClientScriptResourceLabel类里面是空的,唯一有用的就是注册了一下资源,接下来我们把ClientScriptResourceLabel里面的资源注释掉,把资源注册到AssemblyInfo.cs中,也能够正确显示。这就让我纳闷了!type指向的是一个空的类也能够显示资源,但是我用this.GetType()或用typeof(_Default)通通都不行!!我猜想这个GetWebResourceUrl第一个参数只需要我们把他指引向正确的DLL空间就行了,然后就可以找到资源了!?还有我用Assembly.Load("FunkyTextBox").GetType()来指定Type也是不行的,感觉还是学得比较浅:)
&&&&现在基本能达到我的直接访问内部资源文件的要求了,只是需要多一个空类来指定type,暂时满足我的要求,目前可以考虑把JS放到这个里面来,这样一来如果拷贝生成JS的SRC链接直接访问可是不行的哦!就到这里,欢迎多多交流!
补充——代码下载[]:
&&&&&当时写的Demo,是在别人的源码基础上改的:
阅读(...) 评论()游戏中的资源打包技术 -
游戏中的资源打包技术
  打包,很形象的,就是把零散的东西转换为单一的东西。常用的压缩软件就可以说是给文件打包。那么,在游戏中为什么要打包?有什么意义么?个人认为,有以下几个意义:
 1.安全性。
如果你的游戏重要数据以文本文件的形式保存在某些文件中,然而你又不希望玩家随意修改这些数据。(比如某些ini文件之类的)把他们和其他2进制文件全部打包在一起的话,这个问题就可以避免了。
2.节约磁盘空间。
文件太多的话,很容易产生“碎片”。比如一个1个字节的文件,占用空间就高达8Kb。(这个是由windows文件管理系统决定的),如果是很多这样的文件,就可能会发生这种情况:xxxxx个文件,实际大小1xxMb,占用空间3xxMB,(这里只是打一个比方,实际相差不会那么多)。这也许会让人感觉不舒服。
简单的少量文件总比一大堆乱七八糟的东西更让人觉得舒服。
4.还没想到......
下面说说我的设计思路。
打包后的文件该是怎样一种结构呢?
我想到的有以下几种结构:
文件标示信息&& //判断是否是正确的打包文件
文件的个数,文件索引表大小
各个文件的一个索引表.里面包含每个文件的偏移,大小.类似这种结构:文件名 偏移 大小.
各个文件内容
文件标示信息
第一个文件信息: 文件名长度,文件名,文件长度
第二个文件信息: 文件名长度,文件名,文件长度
第n个文件信息: 文件名长度,文件名,文件长度
(文件计数)
打包成两个文件,一个负责方式1的索引表.另外一个只负责文件内容
这里第1种和第三种方式必须要得到索引表信息后才能填充文件,不如方式2直截了当.所以我在程序设计的时候采用的是方式2.当然方式1,3也有他们的好处,比如查找文件比2要方便一点.
需要压缩么?
  解压缩是要花费时间的.你可以从速度和容量方面做一个折中.我在设计的时候,没有考虑压缩.
怎样在游戏中从已经打包了的文件读取需要的文件?
  最简单的方法,得到需要的文件信息,从打包文件中读取出来,放到一个临时文件中.读取这个临时文件即可,
游戏结束之前,从程序中删除这个临时文件即可.这里就带来了一个问题:性能.每次都要进行I/O操作.如果每个文件都不是非常大的文件的话,这个办法还是可以的.或则你需要高性能的东西,那就只有一个办法:把你的程序中所有对文件操作都改到对内存进行操作.这样只要把需要的文件从打包文件中读取到内存中即可.或者还有另外的方法,直接在打包文件中读取(这个我还不知道怎么实现,盼望高手赐教之)
  在制作游戏过程中,当然不用打包,只是在正式版发布后,把所有已经做好了的资源(比如图片,一些数据文件,脚本文件等)打包再一起就可以了.类似如下结构
  //假设这个是一个打包类的一个成员函数,
CPackFile::GetPackFileFromPacker(char*szFindFile,char*szTempFile)
#ifndef PACKER
strcpy(y,x);
在打包文件中查找szFindFile,如果找到,创建文件名为szTempFile的文件,返回true
否则,返回false
  程序中应该有如下片断
szFile[256];
packer.OpenPackFile(&somefile.pak&);
................
if(packer.GetPackFileFromPacker(&resource.bmp&,szFile))
do something....
  下面看看我的具体程序吧!
  欢迎和我交流
  OICQ:(难得糊涂)
本站中所有文章以及图形均为作者本人、公司所有,本站所有资讯仅供参考,若有任何损失本站概不负责,请自行斟酌。
Copyright &
? 中国游戏开发资源网() All Rights reserved.
This site is optimized for at least
resolution (hi-color) viewing
with a browser that supports style sheets.游戏开发技术总结(经典之作)第十集 快一点----又一种图形获得方法--&游戏资源打包 - 推酷
游戏开发技术总结(经典之作)第十集 快一点----又一种图形获得方法--&游戏资源打包
<span style="color:#cc 任务
&&&&&&& 编制图形资源压缩打包程序, 从中学习图形资源压缩打包方法。在我们的游戏中
将图形资源压缩包调入内存、读取指定的图形。
<span style="color:#ff 图形资源的打包
&&&&&& 图形资源打包是我们对游戏资源预处理过程,它不是我们游戏程序的部份。所以
我们单独编一个程序来实现图形资源打包。这个程序我们命名为“资源打包”,光盘上
两样有它的源程序和运行程序。
<span style="color:#-2-1 资源打包程序简介
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 图10-1
&&&&& “资源打包.exe”程序使用的方法很简单,运行后,按“选择目录”进入目录选择
框,选定你要打包的图形目录即可。
&&&&&&&&&&&&&&&&&&&&& 图10-2
&&&&&&&&目录选定后,按“打包” 程序就将你选择的图形目录下的所有图形压缩打包在一
个扩展名为“gam”的图形包文件中,包中图形的位置和图形的显示偏移量打在扩展名
为“dar” 偏移包文件中。
图形包的结构
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 图10-3
偏移包*.dar 的结构
资源打包程序对图形文件、偏移量文件的文件名有一定的要求。
图形文件名要求: c#####.bmp, 第一个为c00000.bmp。
偏移量文件名要求: c#####.txt, 第一个为c00000.txt。
<span style="color:#-2-2 选择目录
&&&&&&& 这是一个在“OnOK()”调用的Windows 标准选择目录的对话框程序段。
调用 opendir()时, 由第1~17 行将弹出Windows 标准的选择目录对话框,选中我们
所需目录后,程序做以下两件事;
A.第18 行调用遍历目录函数findfile0(dirna,&*.bmp&),得到“dirna ”目录下bmp 类型
文件的数量shulian。
B.第20 行将所选目录“dirna”在“ IDC_EDIT1” 显示, 第21-23 行bmp 类型文件
的数量shulian 在“ IDC_EDIT2”上显示。
void CMyDlg::opendir() //选择目录
1{ BROWSEINFO *m_
2 char m_buffer[MAX_PATH];
3 m_pbi = NULL;
4 m_pbi = new BROWSEINFO();
5 ::ZeroMemory(m_pbi, sizeof(BROWSEINFO));
6 m_pbi→hwndOwner = GetSafeHwnd();
7 m_pbi→pszDisplayName = m_
8 m_pbi→lpszTitle = &选择目录&;
9 m_pbi→pidlRoot=0;
10 m_pbi→ulFlags =BIF_EDITBOX ;// BIF_RETURNONLYFSDIRS;
11 ITEMIDLIST *idl = SHBrowseForFolder (m_pbi);
12 if (idl)
13 { SHGetPathFromIDList (idl, m_buffer); //
14 dirna=m_
15 LPMALLOC
16 if (SHGetMalloc (&lpm) == NOERROR)
17 lpm→Free(idl);
18 shulian=findfile0(dirna,&*.bmp&);
19 delete[] m_
20 SetDlgItemText(IDC_EDIT1, dirna);
22 cc.Format(&%d&,shulian);
23 SetDlgItemText(IDC_EDIT2, cc);
<span style="color:#-2-3 资源打包的程序主结构
这是按“打包” 按钮后执行的程序,程序中所有没定义的变量都是全局变量。
void CMyDlg::OnButton1() //打包
{//A.初始化
1 CClientDC dc(this); //取客户区设备环境
3 na=dirna.Right(2);// 取最后一级目录名,将作为包名。dirna 为所选目录。
4 len=0; //图形包长度清0
5 buf=(BYTE *)new BYTE[15*]; //创建定长的内存块,存放全部图形
6 tmp=(BYTE *)new BYTE[55000]; //创建定长的内存块,存放某个图形
7 bufadd[1]=0; //图形包指针清0
//B.压缩打包循环
8 for(int i=0;i&i++) // shulian 是图片数
9 {BitBlt(dc.m_hDC,10,10,210,200,dc.m_hDC,220,10,0xcc0020);//屏幕刷新
10 cc.Format(&%s/c%05d.bmp&,dirna,i); //生成图片文件名
11 LoadBmp(dc.m_hDC,cc,i); //调图片,压缩打包。
12 SetWindowText(cc); //在窗口标题栏显示当前文件。
13 Sleep(3); //延时。
//C.写图形包
16 cc.Format(&../%s.gam&,na);
18 if( !file.Open(cc, CFile::modeCreate|CFile::modeWrite, NULL))
19 file.Write(buf,len);
20 file.Close();
//D.写偏移包
21 cc.Format(&../%s.dar&,na);
22 if( !file.Open(cc, CFile::modeCreate|CFile::modeWrite, NULL))
23 cc.Format(&%d\r\n&,pop);
24 file.Write(cc,lstrlen(cc));
25 for (int j=0;j&=j++)
26 {cc.Format(&%d,%d,%d\r\n&,bufadd[j],bufx[j],bufy[j]);
27 file.Write(cc,lstrlen(cc)); //
29 file.Close();
<span style="color:#-2-4 主结构程序注释
这个“打包”按键消息函数有四部分功能。
第3 行 取最后一级目录名,将作为包名。dirna 为所选目录。
第5 行 创建一个内存变量buf 用来装压缩打包后的数据,长度设为可能的最大长
第6 行 创建一个内存变量tmp 用来装某个图片压缩打包后的数据,长度设为可能
的最大长度。
压缩打包循环
在这个循环里用函数LoadBmp(dc.m_hDC,cc,i)实现对shulian 个图形的压缩打
包。在打包压缩过程中,我们将每个图片打包压缩后的数据又同时解包出来显示,这
样做的目的是方便动态调试LoadBmp(dc.m_hDC,cc,i)中的压缩打包算法。
所以第9 行是清除上一图形显示内容。
第12 行 在窗口标题栏显示当前正处理的文件。
第13 行 延时,使我们可以观看压缩打包的过程。
第15 行 pop 是包中的图形数量。
第16 行 生成图形包文件名。
第17~20 行 写图形包,图形包数据在buf 中,长度为len。
第21 行 生成偏移包文件名。
第22 ~ 29 行 写偏移包, 其中bufadd[j] 为图形包中各压缩图形的位
置,bufx[j],bufy[j]为图形的显示偏移量X、Y。
<span style="color:#-2-5 LoadBmp 压缩打包函数
&&&&& 压缩打包函数由 4 部分构成。基本结构为:调“fileName”图形调入位图相关结构
bi1 后,压缩打包到内存块buf 中,同时调入图形偏移量到偏移量数组中,最后将图形
包buf 中的图形解包验证显示。
void LoadBmp(HDC hdc,CString fileName,int pop)//调图片
{//A.读入BMP 图形到内存数据区bi1
LPBITMAPINFOHEADER bi1;
HANDLE m_Buf= NULL;
LPVOID lpmem = NULL;
if( !file.Open( fileName,CFile::modeRead))
BITMAPFILEHEADER
file.Read(&fileinfo,sizeof(fileinfo));
if(fileinfo.bfType != (('M'&&8)+'B'))
UINT m_Off=fileinfo.bfOffB
UINT length = file.GetLength() - sizeof(BITMAPFILEHEADER);
if(m_Buf != NULL)
{GlobalFree(m_Buf); m_Buf = NULL; }
m_Buf = GlobalAlloc(GMEM_MOVEABLE|GMEM_DISCARDABLE,length);
lpmem = GlobalLock(m_Buf);//图形数据指针lpmem
if(length != file.ReadHuge(lpmem,length))
{ GlobalUnlock(m_Buf);GlobalFree(m_Buf);
bi1=(BITMAPINFOHEADER *)
//B.bi1 中数据压缩打包到buf
1 bi1-&biSize = sizeof(BITMAPINFOHEADER);
2 bi1-&biSizeImage=bi1-&biWidth*bi1-&biH
3 int cols=PaletteSize((LPBYTE)bi1);
4 int len0=bi1-&biSize+bi1-&biSizeImage+
5 if(bi1-&biSizeImage&10)
6 bi1=icmode(bi1); //压缩位图
7 bi1-&biSize = sizeof(BITMAPINFOHEADER);
8 int len1=bi1-&biSize+bi1-&biSizeImage+
9 memcpy(buf+bufadd[pop],bi1,len1);
10 len+=len1;bufadd[pop+1]=
11 GlobalUnlock(m_Buf);GlobalFree(m_Buf);
//C.取图形显示偏移量
13 cc=fileName.Left(lstrlen(fileName)-3);
14 cc+=&txt&;
15 FILE *f;
16 f=fopen(cc,&r&);
17 if(f!=NULL)
18 {fscanf(f,&%d,%d&,&bufx[pop],&bufy[pop]);//角色的偏移位置
19 fclose(f);
//D.解包显示
20 memcpy(tmp,buf+bufadd[pop],len1);
21 bi1=(BITMAPINFOHEADER *)
22 int w =bi1-&biW
23 int h =bi1-&biH
24 StretchDIBits(hMDC,0,0,w,h,0,0,w,h,
tmp+256*sizeof(RGBQUAD)+bi1-&biSize,
(BITMAPINFO* )bi1,DIB_RGB_COLORS,SRCCOPY);
25 TransparentBlt2(hdc,10+bufx[pop],10+bufy[pop],w,h,
hMDC,0,0,w,h,RGB(255,255,255));//显示
<span style="color:#ff-6 压缩打包函数注释
读BMP 图形到位图相关结构bi1 中
“读入BMP 图形到内存数据区bi1”,是一个典型的源于Windows 的API 函数中读
取BMP 的程序段。位图相关结构变量bi1 中不但有了图形,还有了这个图形的所有有关
位图相关结构的部分成员变量
注意这段程序创建的一个图形结构指针m_Buf 在第11 行释放。
bi1 中数据压缩打包到buf
第 1 行设置 bi1 为位图相关结构。
第 2 行获取图形数据的长度,我们这里用的所有图形都是256 色的位图,图形数
据长度正好是图形的高乘宽。
第 3 行取 256 色图形的调色板长度。
第 4 行 bi1 的总长度为bi1-&biSize+bi1-&biSizeImage+cols,结构描述+图形数据+调色
第 5 行若是空图形则返回。
第 6 行调用 icmode(?)压缩位图函数,对bi1 中的图形进行压缩,压缩后的图形返
回到bi1 中。这时bi1 中已是压缩图形了。
第 7 行再设置 bi1 为位图相关结构,这时结构的成员变量中有些数据已变,例如图
形数据的长度biSizeImage 变小了(因为图形压缩了)。
第 8 行获取压缩后的 bi1 长度。
第 9 行将第 pop 个长度为len1 的压缩图形数据bi1 拷贝到内存块buf 中。
第 10 行 buf 的长度加上刚才拷入的数据长度bufadd[pop+1]=len,为记录下一个压缩
包的位置。
第 11 行现在图形数据已拷到 buf 中,可以释放图形结构指针m_Buf 了。
取图形显示偏移量
第 12~ 14 行生成图形偏移文件名。
第 15 行定义文件指针。
第 16 行打开图形偏移文件。
第 18 行读偏移量 X、Y 到第pop 个图形的偏移数组中
第 19 行关闭文件。
这是验证性的解包显示。如果这里显示正常说明我们的压缩打包的方法是正确的,
这个解包算法将用于我们的游戏中。
第 20 行从内存块 buf 中取长度为len1 的第pop 个图形到内存tmp 中。
第 21 行位图相关结构变量 bi1 指向内存块
第 22~ 23 行取图形的宽、高
第 24 行将位图相关结构bi1 中图形转换到设备场景hMDC 中,这个转换过程自动解
除图形的压缩。
第 25 行将图形在当前窗口上透明显示。
<span style="color:#ff 图形压缩包的使用
&&&&& 现在回到我们的游戏编程上。在我们这个游戏里, 用资源打包程序形成了三个类
型的六个文件,它们分别是:
以下我们来将图形包和图形偏移包调入内存,并从这种压缩图形资源中提取图形
和图形偏移量。
<span style="color:#-3-1 调压缩资源包
是“game_寻路.cpp”类文件中的功能函数。
//**************************************************
// loaddata()//调压缩资源包
// A.读图形偏移包*.dar 分别调入景j、兽s、人r 的
// 图形压缩包指针和位置偏移量到相应数组
// Xbufadd ,图形压缩包指针
// Xsbufx ,x 位置偏移量
// Xsbufy ,y 位置偏移量
// B.分别调入景j、兽s、人r 的图形压缩包*.gam 数据到
// 内存jtmp、stmp、rtmp 中
//**************************************************
void gamepro::loaddata()//调压缩资源包
{// A.读图形偏移包*.dar
1 FILE *f;
2 int len,i,j;
4 cc=dir+&兽.dar&;
5 f=fopen(cc,&r&);
6 if(f==NULL)
7 fscanf(f,&%d&,&len);
8 for(i=0;i&i++) //用循环读入len 个图形的位置、图形的偏移量
9 fscanf(f,&%d,%d,%d&,&sbufadd[i],&sbufx[i],&sbufy[i]);
10 fclose(f);
11 cc=dir+&人.dar&;
12 cc=dir+&景.dar&;
// B.读图形压缩包*.gam
13 cc=dir+&兽.gam&;
14 if( !sfile.Open(cc, CFile::modeRead, NULL ) )
15 len=sfile.GetLength();
16 stmp=(BYTE *)new BYTE[len]; //兽
17 sfile.Read( stmp, len);
18 sfile.Close();
19 cc=dir+&人.gam&;
20 cc=dir+&景.gam&;
调压缩资源包程序注释:
分别调入兽、人、景的图形偏移包*.dar。
第 1~ 3 行定义变量。
第 4 行生成“兽”的图形偏移包文件名。
第 5 行打开“兽”的图形偏移包文件。
第 7 行读入图形的数量到 len。
第 8、9 行用循环读入 len 个图形的位置、图形的偏移量。
第 10 行关闭文件。
以下用同样方法分别读入“人”、“景”的图形偏移包。
分别调入兽、人、景的图形压缩包*.gam。
第 13 行生成“兽”的图形包文件名。
第 14 行打开“兽”的图形包文件,没有就返回。
第15 行读图形包文件长度。
第 16 行创建“兽”&的图形包内存stmp。
第 17 行将“兽”的图形包读入内存stmp。
第 18 行关闭文件
18 行以后用同样方法分别读入“人”、“景”的图形包。
<span style="color:#-3-2 压缩图形的相关变量定义
&&&&&& 因为压缩图形的调用在类文件“Game.cpp”中,我们应该在“Game.h”定义与压缩
图形的相关变量。
HBITMAP //
CFile sfile,rfile, //压缩资源包的文件指针
BYTE *stmp,*rtmp,* //压缩的内存变量
int sbufadd[SBUF]; //兽的资源指针
int rbufadd[RBUF]; //人的资源指针
int jbufadd[JBUF]; //景的资源指针
short int sbufx [SBUF]; //兽的偏移量x
short int sbufy [SBUF]; //兽的偏移量y
short int rbufx [RBUF]; //人的偏移量x
short int rbufy [RBUF]; //人的偏移量y
10-3-3 调压缩图片getpic0(?)
在“快一点Dlg.cpp”的OnInitDialog()中我们加入;
m_game.loaddata(); //调资源包
loaddata()执行后,stmp、rtmp、tmp 内存变量就不是空值了(! =NULL)。由此我们
就可以在原来getpic(?)调图片到相关位图中,并判断是调用普通图形还是调用压缩资
源中的图形。
//**************************************************
// getpic(CString cc,int p) 调图片到相关位图
// 由p 得到将调的图形文件名。
// 在指定目录中调入图形到相关位图bit
//**************************************************
BOOL game::getpic(CString cc,int p)//调图片到相关位图
{ char name[256];
if(stmp==NULL) //没有压缩资源
{?? //调普通图形
{if(getpic0(cc,p)) return TRUE;//调压缩资源的图形。
else return FALSE;
调压缩图片getpic0(? )是“Game.cpp”类文件中的功能函数。
//****************************************************************
// BOOL getpic0(CString cc,int p) 调压缩图片
// 在cc 指定的压缩库中取第p 个图形和图形的尺寸w、h,取得的图形在MemDC 中。
//****************************************************************
BOOL game::getpic0(CString cc,int p)//调压缩图片
2 if(p&0) return FALSE;
4 if(cc==&人&)
5 {if(p&RBUF-1) return FALSE;
6 len=rbufadd[p+1]-rbufadd[p]; //取数据块长度
7 tmp=(BYTE *)new BYTE[len];
8 Memcpy0(tmp,rtmp+rbufadd[p],len);
9 if(cc==&兽&)
10 if(cc==&景&)
11 LPBITMAPINFOHEADER bm=(BITMAPINFOHEADER *) //图形数据转换
12 bm-&biSize = sizeof(BITMAPINFOHEADER);
13 w=bm-&biW //图形高
14 h=bm-&biH //图形宽
15 OldMak=(HBITMAP)SelectObject(MemDC,bitya);
16 StretchDIBits(MemDC,0,0,w,h,0,0,w,h,
tmp+256*sizeof(RGBQUAD)+bm-&biSize,
(BITMAPINFO* )bm,DIB_RGB_COLORS,SRCCOPY);
17 delete[]
18 return TRUE;
调压缩图片getpic0(? )注释:
第 1 行定义长度变量 len。
第 2 行如果图形序号小于 0 返回。
第 3 行定义一个图形内存变量 tmp。
第 4 行如果是调用“人”的图形。
第 5 行图片序号大于“人”的最大值返回。
第 6 行取数据块长度 len。
第 7 行创建长度为 len 图形内存变量tmp。
第 8 行拷贝图形包中第 p 个图形数据到tmp。
以下采用与“人”的同样的图形调用方法调入“兽”、“景”的图形数据到tmp。
第 11 行图形数据 tmp 转换到位图相关结构变量bm。
第 12 行设置 bm 为位图相关结构。
第 13、14 行取图形高、宽。
第 15 行位图内存 bitya 与设备场景MemDC 关联。
第 16 行将 位图相关结构bi1 中图形转换到设备场景MemD 中。
第 17 行删除图形内存变量。
第 18 行返回。
&&&&&&& 好了,我们虽然费了些劲,但是在我们将发布的游戏图片目录中抛弃了7298 个图
形文件和文本文件。留在图片目录中的就只有6 个打包文件了,并且文件的大小也从
原来的9.67MB 减少到5.84MB。其中:
景.dar&&& 2KB
景.gam& 670KB&&&&&&&& 原97 个BMP 文件,1.3MB
兽.dar&& 37KB
兽.gam 3,964KB&&&&&&&原800 个BMP 文件、800 个TXT 文件,1.64MB
人.dar 11KB
人.gam 1,305KB&&&&&& 原2800 个BMP 文件、2800 个TXT 文件,6.06MB
关键还在于,现在游戏运行时,所有的图形资源已进入了计算机内存,不再是随
时从硬盘上读图形文件了,所以游戏的画面更流畅( 游戏运行期间,硬盘的灯不再频
繁闪烁了)。
详细内容请看本章实例程序:“快一点”。
<span style="color:#ff 小结
在这一章里,我们学了以下知识和方法。
1.图形资源的打包方法。
2.图形的压缩方法。
3.将压缩资源包一次性调入内存。
4.从内存的压缩资源包中读取指的图形。
已发表评论数()
&&登&&&陆&&
已收藏到推刊!
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见

我要回帖

更多关于 exe资源打包加密器 的文章

 

随机推荐