游戏开发论坛

 找回密码
 立即注册
搜索
查看: 16195|回复: 31

游戏中的资源打包!

[复制链接]

10

主题

40

帖子

45

积分

注册会员

Rank: 2

积分
45
发表于 2005-8-4 01:10:00 | 显示全部楼层 |阅读模式
游戏中的资源打包

    本人正在准备做一个游戏引擎(你就当我准备产生垃圾好了~呵呵!),准备写文档,就顺便把这篇文章写出来了,初次发稿,写得可能不是很好,请多多包涵~谢谢!~~

    资源打包就是将一些零碎资源(如图片,音乐文件)。打包的好处有哪些呢?

1、减少碎片。因为WINDOWS的文件管理系统的原因,将这些资源按原样放在硬盘里,会产生“碎片”。比如1个字节的文件,占用的空间就高达8KB。这样,资源可以说“膨胀”了。

2、安全。将这些数据集合起来打包的话,就可以隐藏这些文件,让用户不能修改(如果某位高手破解了文件结构并提取出来了的话你当我没说~)

我想到的只有这些,如果哪位大虾认为还可以补充的,请联系我:)

    好了!我们现在来构造一个结构来储存这些文件吧!在这里因为我准备写的是只储存图形的游戏引擎,所以我想到的只是图片的储存,其他文件的储存,这里没有涉及。
    我们先构造一个文件头,这个文件头描述了一些基本的信息,有长度,文件版本,压缩类型,还有储存的图片总数。现在详细的说一下,长度就不用说了吧,文件头的大小。文件版本是给打包工具看的东东,游戏引擎里也可以使用,根据版本来用不同的方法打开文件(不同的结构,或者其他的)。压缩类型是一个以备扩展用的东东,根据标识来使用不同的压缩方法解压缩,在这里可以选一个速度和容量折中的压缩方法。图片总数说的不是单个图片的总数,而是静态图片和动态图片的总数,静态图片可以理解成一个图片,动态图片就是一系列静态图片的集合,这个在后面会说到。讲一个文件头就说了这么多话。我讲得是太详细了还是太水了?
struct FileHeader
{
    unsigned long headsize;                 //文件头长度
  int  Version;                  //文件版本
  int  Compress;                 //压缩类型
  int  AllNumber;                //图片总数
}
    然后紧跟一个结构数组,这个结构描述了每个图片的起始偏移量,这个偏移量是以文件头的长度+索引结构数组的长度+1为基址的,还描述了图片的帧数,为1则表示为静态图片,大于1则表示动态图片(动态图片很有用处,比如海面,被风吹动的树,这些就可以很容易的表示出来)
struct PicIndex
{
        int   offset;                                  //图片偏移量
        unsigned long  PicSize ;        //图片长度(如果是多帧的则代表这个图片集的总共长度)
    int   nFrameNumber;              //图片帧数
    unsigned long  nFrameSize[nFrameNumber]; //每一帧的偏移量,这里的偏移量就是基址+offset+这一个偏移量。。#··%…!天书?
    //当然上面这个数组定义编译时不能这样写
}
PicIndex结构是一个数组,它的下标为AllNumber个。例如:PicIndex Index[AllNumber];
    然后剩下的就是一些数据了,这些数据已经被压缩了,压缩方式通过文件头的AllNumber变量来获得。

下标n其实就是AllNumber,这里为了省空间:)
值得注意的是后面的压缩数据不是整块压缩的,而是单个图片的压缩,然后放在一起而已,我这样做是为了读取方便,就不用读取一个数据还要把整个文件再解压缩一道了,这样压缩率可能也会降低,不知道是否还有更好的办法,如果有,请联系我~谢谢!

除了我写的这种结构方式来储存文件以外,还有其他的实现方案,但是我觉得这个好一点。

代码我刚写一半,还不完全,所以这里就不放上来了。
我的QQ:393277421
我再说一句最重要的话:有空常联系~~~~~~~~
[em3]
sf_2005841942.bmp

10

主题

40

帖子

45

积分

注册会员

Rank: 2

积分
45
 楼主| 发表于 2005-8-4 01:25:00 | 显示全部楼层

Re:游戏中的资源打包!

哎,大半夜的。。。自己抢沙发先`。。。。

1万

主题

1万

帖子

2万

积分

管理员

中级会员

Rank: 9Rank: 9Rank: 9

积分
20691
发表于 2005-8-4 14:54:00 | 显示全部楼层

Re:游戏中的资源打包!

不错!Up!

10

主题

40

帖子

45

积分

注册会员

Rank: 2

积分
45
 楼主| 发表于 2005-8-4 19:30:00 | 显示全部楼层

Re:游戏中的资源打包!

sea_bug啊,偶好崇拜你,几个人开发出来的引擎真好
有QQ吗。咱聊聊~~

86

主题

2251

帖子

2386

积分

金牌会员

Rank: 6Rank: 6

积分
2386
QQ
发表于 2005-8-4 20:12:00 | 显示全部楼层

Re:游戏中的资源打包!

好文!
可惜有个图是个小叉叉~改下吧

10

主题

40

帖子

45

积分

注册会员

Rank: 2

积分
45
 楼主| 发表于 2005-8-4 20:17:00 | 显示全部楼层

Re:游戏中的资源打包!

哎,那个图就是下面的资源,我放电子邮箱里。。不知道怎么又看不到了。。

86

主题

2251

帖子

2386

积分

金牌会员

Rank: 6Rank: 6

积分
2386
QQ
发表于 2005-8-4 23:46:00 | 显示全部楼层

Re:游戏中的资源打包!

OK,收藏
楼主才初中?

10

主题

40

帖子

45

积分

注册会员

Rank: 2

积分
45
 楼主| 发表于 2005-8-5 00:05:00 | 显示全部楼层

Re:游戏中的资源打包!

是的,快上高中了,呵呵

16

主题

266

帖子

296

积分

中级会员

Rank: 3Rank: 3

积分
296
发表于 2005-8-5 09:09:00 | 显示全部楼层

Re:游戏中的资源打包!

不错,UP

0

主题

4

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2005-8-9 18:00:00 | 显示全部楼层

Re:游戏中的资源打包!

牛人  我感觉 自己白混了!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-27 10:19

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表