游戏地图的存储方法及系统、游戏地图的获取方法及系统转让专利

申请号 : CN200610144124.2

文献号 : CN100595758C

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 陈敏

申请人 : 北京金山软件有限公司北京金山数字娱乐科技有限公司

摘要 :

本发明提供了游戏地图的存储、获取方法,存储、获取方法为:将游戏地图分解为预设大小的地图块并给每个地图块分配一个唯一标识;分别对地图块进行压缩并保存入地图文件中,并保存被分解游戏地图的标识信息、每个地图块的唯一标识及每个地图块压缩后的长度与存储位置的地址信息至地图文件;触发读取游戏地图信息时,计算的地图块范围,通过被分解游戏地图的标识信息找到地图文件,通过地图块的唯一标识,查找计算地图块存储地址及长度,将获取的压缩地图块解压缩并显示;本发明还提供了游戏地图的存储系统、一种游戏地图的获取系统,该系统包括:捕捉单元、分块单元,编号单元、压缩/解压缩单元、存储单元、显示单元、计算单元、获取单元。

权利要求 :

1、一种游戏地图的存储方法,其特征在于,该方法包括: 将游戏地图分解为预设大小的地图块,并给每个地图块分配一个唯一标识;分别对地图块进行压缩并保存入地图文件的数据块部分,并保存被分解游戏地图的标识信息、每个地图块的唯一标识及每个地图块压缩后的长度与存储位置的地址信息至地图文件的文件头部分。

2、 根据权利要求1所述的游戏地图的存储方法,其特征在于,将地图块 采用Zlib压缩算法进行压缩。

3、 一种游戏地图的获取方法,其特征在于,该方法包括:将游戏地图分解为预设大小的地图块并给每个地图块分配一个唯一标识; 分别对地图块进行压缩并保存入地图文件的数据块部分,并保存被分解游戏地 图的标识信息、每个地图块的唯一标识及每个地图块压缩后的长度与存储位置 的地址信息至地图文件的文件头部分;触发读取游戏地图信息时,计算需要的地图块范围,通过被分解游戏地图 的标识信息找到地图文件,并通过地图块的唯一标识,查找计算范围内的地图 块的存储地址及长度,将获取的压缩地图块解压缩并显示。

4、 根据权利要求3所述的游戏地图的获取方法,其特征在于,将地图块 采用Zlib压缩算法进行压缩与解压缩。

5、 一种游戏地图的存储系统,其特征在于,该系统包括:分块单元,编 号单元、压缩单元、存储单元;分块单元用于将游戏地图分解成预置大小的地图块;编号单元用于对分块单元分解出的地图块进行编号;压缩单元用于将分解单元分解出的地图块进行凄t据压缩;存储单元用于在地图文件的数据块部分存储压缩单元压缩过的地图块数 据,在地图文件的文件头部分存储游戏地图的标识、每个地图块的编号及每个 地图块的存储位置与大小信息。

6、 一种游戏地图的获取系统,其特征在于,该系统包括:捕捉单元、分块单元,编号单元、压缩/解压缩单元、存储单元、显示单元、计算单元、获 取单元;分块单元用于将游戏地图分解成预置大小的地图块;编号单元用于对分块单元分解出的地图块进行编号;压缩/解压缩单元用于将地图块进行数据压缩与解压缩;存储单元用于在地图文件的数据块部分存储压缩单元压缩过的地图块数 据,在地图文件的文件头部分存储游戏地图的标识、每个地图块的编号及每个 地图块的存储位置与大小信息;捕捉单元用于获取玩家的当前坐标位置;计算单元用于根据获取的玩家坐标位置计算当前玩家所在的地图编号,及 根据玩家的坐标位置计算需要获得的地图块编号;获取单元用于根据计算单元计算出的地图编号、玩家需要获得的地图块编 号来查找压缩地图块的存储地址及大小信息,并获取压缩地图块数据;显示单元用于将压缩/解压缩单元解压过的地图块显示给玩家。

说明书 :

游戏地图的存储方法及系统、游戏地图的获取方法及系统

技术领域

本发明涉及画面显示4支术,尤其涉及游戏地图的存储方法及系统、游戏地 图的显示方法及系统。

背景技术

游戏地图,也称为游戏的场景,是使玩家能融入游戏的重要要素。尤其
3D室外游戏地图的特点是视野开阔。为了充分突出这个特点,目前3D游戏 都采用高度图的方式来制作地表。为了给适应游戏玩家越来越高的要求,室外 游戏地图的面积也越来越大,那么随之而来的就是高度图的尺寸也快速增大 了。将高度图存储成地图文件以后,导致了地图文件过于庞大,占用了过多的 存储空间。
上面所述的高度图实际上就是指一个用于存储地形信息的二维数组。地形 信息实际上是指一系列高度不同的网格,这样数组中的每个元素的下标刚好可 以用来定位不同的网格(X,Y),数组中每个元素所存储的值就是网格的高度 (Z)。
例如用二维数组A (a [0] [O]; a [ 0〗[1〗;a [ 1 ] [ 0 ]; a[l][l]) 来定位不同的网格:用a [0] [0]定位网格(X0,Y0); a [O][l]定位网格 (X0,Y1); a [ 1 ] [ 0 ]定位网格(X1,Y0) ; a [ 1 ] [ 1〗定位网格(X1,Y1 )。
a [0] [0]的用来存储网格(X0,Y0)的高度值(Zl ) ; a [O][l]用来存储 网格(X0,Y1)的高度值(Z2) ; a [ 1 ] [ 0 ]用来存储网格(X1,Y0 )的高度 值(Z3) ; a [ 1 ] [ 1 ]用来存储网格(X1,Y1)的高度值(Z4)。
在存储3D室外游戏地图的时候,游戏地图所使用的高度图决定了场景的 大小,因此也决定了存储空间的大小。假设要表达一张大小是1024*1024米的 地图,那么高度图的大小是1024*1024米,若使用浮点数存储高度图的话,1 个浮点数等于4个字节,那么存储的文件大小是4*1024*1024 = 4 (兆)。可以看出若使用这种存储方法, 一个游戏地图将占用大量的存储空间。
为了解决这个问题,目前使用的方法是减小存储高度图的高度值的精确 度,不使用浮点型,而使用l字节存储高度值。例如,将地形中的最低点用0
表示,而最高点用255表示,然后再将形成的高度图进行压缩。
采用降低高度值精度的方法虽然能够在一定程度上降低了存储游戏地图 时的存储空间,^旦是降低高度值精度也就降低了游戏地图中的地表精度,这样
会降低游戏的视觉效果,使得游戏玩家感受不到3D游戏带来的视觉沖击,降 低了游戏的娱乐性。
综上所述,现有技术虽然能够解决游戏地图占用存储空间较大的问题,但 是在用户体验和交互上都不理想。

发明内容

本发明要解决的问题是提供游戏地图的存储方法及系统、游戏地图的获 取方法及系统,在不需要降低游戏地图显示精度的情况下降低占用的存储空 间,并便于游戏地图的存储与读取。
为实现上述发明目的,本发明是通过一下技术方案实现的:
将游戏地图分解为预设大小的地图块,并给每个地图块分配一个唯一标 识;分别对地图块进行压缩并保存入地图文件的数据块部分,并保存被分解游 戏地图的标识信息、每个地图块的唯一标识及每个地图块压缩后的长度与存储 位置的地址信息至地图文件的文件头部分。
其中,将地图块采用Zlib压缩算法进行压縮。
为实现上述发明目的,本发明还提供了一种游戏地图的获取方法,该方法 具体为:
将游戏地图分解为预设大小的地图块并给每个地图块分配一个唯一标识; 分别对地图块进行压缩并保存入地图文件的数据块部分,并保存被分解游戏地 图的标识信息、每个地图块的唯一标识及每个地图块压缩后的长度与存储位置 的地址信息至地图文件的文件头部分;
触发读取游戏地图信息时,计算需要的地图块范围,通过被分解游戏地图的标识信息找到地图文件,并通过地图块的唯一标识,查找计算范围内的地图 块的存储地址及长度,将获取的压缩地图块解压缩并显示。
其中,将地图块采用Zlib压缩算法进行压缩与解压缩。
为实现上述方法,本发明还提供了 一种游戏地图的存储系统,该系统包括:
分块单元,编号单元、压缩单元、存储单元;
分块单元用于将游戏地图分解成预置大小的地图块;
编号单元用于对分块单元分解出的地图块进行编号;
压缩单元用于将分解单元分解出的地图块进行数据压缩;
存储单元用于在地图文件的数据块部分存储压缩单元压缩过的地图块数 据,在地图文件的文件头部分存储游戏地图的标识、每个地图块的编号及每个 地图块的存储位置与大小信息。
为实现游戏地图的获取方法,本发明还提供了一种游戏地图的获取系统, 该系统包括:捕捉单元、分块单元,编号单元、压缩/解压缩单元、存储单元、 显示单元、计算单元、获取单元;
分块单元用于将游戏地图分解成预置大小的地图块;
编号单元用于对分块单元分解出的地图块进行编号;
压缩/解压缩单元用于将地图块进行数据压缩与解压缩;
存储单元用于在地图文件的数据块部分存储压缩单元压缩过的地图块数 据,在地图文件的文件头部分存储游戏地图的标识、每个地图块的编号及每个 地图块的存储位置与大小信息;
捕捉单元用于获取玩家的当前坐标位置;
计算单元用于根据获取的玩家坐标位置计算当前玩家所在的地图编号,及
根据玩家的坐标位置计算需要获得的地图块编号;
获取单元用于根据计算单元计算出的地图编号、玩家需要获得的地图块编 号来查找压缩地图块的存储地址及大小信息,并获取压缩地图块数据;
显示单元用于将压缩/解压缩单元解压过的地图块显示给玩家。综上所述,本发明将游戏地图分解成地图块,并给每个地图块编号后压缩
存储,这样能够实现游戏地图的压缩存储;通过实际运用,通过此种方法能够 将游戏地图的存储空间减少到原来的1/10左右。
并由于在存储过程中记录了每个地图的编号与每个地图块的相关数据,使 得在需要读取游戏地图的时候能够快速有效的寻找到需要的地图数据并进行 绘制。
因此本发明能够在不降低游戏地图精度的情况下,减少游戏地图的存储空 间,并使得读取过程中快速而有效,能够为玩家提供高质量的视觉效果,提高 了游戏的娱乐性。

附图说明

图1为本发明存储过程流程图; 图2为本发明地图文件结构图; 图3为本发明地图块编号图; 图4为本发明地图块编号图; 图5为本发明存储游戏地图的系统图; 图6为本发明获取游戏地图的流程图; 图7为本发明获取游戏地图的系统图。 具体实施方式
本发明为游戏地图的存储方法及系统、游戏地图的获取方法及系统,为使 本发明的目的、技术方案及优点更加清楚明白,以下参照附图并举实施例,对 本发明进一步详细说明。
首先对地图文件的存储过程进行说明。参见图1,本发明是将游戏地图分 成块,再将分成块的地图块进行压缩。
步骤101:将地图划分为预定大小的地图块,并给每个地图块进行编号。步骤102:将分解的地图块进行压缩并存储至地图文件的数据块部分。
地图文件结构如图2所示,该地图文件包括文件头和压缩后的数据块。
文件头又是一张记录表,存储当前地图的标识信息和所用地图块的索引信 息,例如地图块的编号、压缩后的长度和地图块开始的位置,即地图块的存储 地址。
数据块部分用来存储压缩后的地图块。
步骤103:将地图块对应的高度图数据,即将地图块的压缩地址及地图块 压缩后的长度及原始地图的标识信息存储入地图文件。
下面通过一个具体的例子来进行说明。
步骤201:将一个编号为Al,大小为1024*1024米的地图分解为64个16*16 米的地图块,并给每个地图块依次编号。
如图3,将A1地图分解为64个16*16米的地图块,每个地图的编号如表 1所示为1-64。
编号也可以采用如图4所示的用二维数组的方法,采用这种编号更加直观 清楚,地图块的位置及地图块之间的位置关系可以直接通过编号看出来。当然 还可以采用其他的编号方式,本说明书不对其进行穷举,也无法对其进行穷举, 但是不管采用哪种编号方式都不影响本发明的实现,因此本发明并不对地图块 的编号方式进行限定。
步骤202:将64个16*16米的地图块分别用在zlib压缩算法进行压缩, 并将分别压缩好的数据存储进地图文件的数据块部分。
在本实施例中使用的是zlib压缩算法,因游戏地图中地表信息的数据大部 分是规则而有序的,刚好符合zlib算法的特点;所以采用zlib算法能够最大程 度的减少地图文件的尺寸。当然在压缩过程中也可以采取其他压缩算法,在此 并不进行限制。
步骤203:将原始地图的标识信息存入地图文件的文件头;同时将每个地 图块的标识信息、存储地址及压缩后的数据长度存储进地图文件大的文件头部
8分。
地图文件表头部分依次存储有被分解地图的唯一标识信息B001及每个地 图块的信息。每个存储地图块信息的表项里存储有地图块的编号、地图块的存 储位置、地图块的数据长度。通过这些地图块的信息就能够从地图文件的数据 块部分快速的获取地图块的数据。
在实施本发明的过程中可以发现,通过此方法可以将一个1024*1024,大 小为144兆的游戏地图存储成44兆大小的游戏地图数据。我们可以从数据看 出采用本发明的存储方法将游戏地图的存储空间减少到原来的1/10左右。
为实现上述游戏地图的存储方法,本发明还提供了 一种游戏地图的存储系 统,参见图5,该系统包括:分块单元(ll),编号单元(12)、压缩单元(13)、 存储单元(14 );
分块单元(11)用于将游戏地图分解成预置大小的地图块;
编号单元(12)用于对分块单元分解出的地图块进行编号;
压缩单元(13)用于将分解单元分解出的地图块进行数据压缩;
存储单元(14)用于存储压缩单元压缩过的地图块数据、存储游戏地图的 标识、每个地图块的编号及每个地图块的存储位置与大小信息。
以上都是在介绍游戏地图的存储方法,下面介绍当需要读取相关游戏地图 块时的步骤,参见图6:
步骤301:根据当前玩家的坐标位置,计算出玩家当前所在的地图;
步骤302:才艮据当前地图编号,加载地图对应的地图文件;
步骤303:才艮据玩家当前的坐标位置,计算出玩家当前应绘制的地图块范
围;
步骤304:通过计算出的地图块范围获得该范围内的每个地图块编号,通 过每个地图块的编号到地图文件中查找相关数据,获得地图块在数据块中存储 的位置和长度。步骤305:取出计算范围内的地图块的数据,解压缩后进行绘制。 参照上述方法,列举一个具体的例子。例如:
步骤401:某玩家当前的坐标位置为(15*40),通过计算得出玩家当前所 在的地图为Al;
步骤402:根据当前地图编号A1,加载地图对应的地图文件;
步骤403:根据玩家当前的坐标位置(15*40),通过计算得出该坐标位置 对应于编号为IO的地图块,假设可见场景对应的是一个2*2个地图块组成的 场景,则以该地图块为中心得到可见场景对应的地图块分别为9、 10、 17、 18;
步骤404:通过计算出的地图块编号,到地图文件中查找相关数据,获得 地图块在数据块中存储的位置和长度。
步骤405:取出计算范围内的地图块的数据,解压缩后进行绘制。
对应于上述游戏地图的获取方法,本发明还提供了 一种游戏地图的获取系 统,参见图7,该系统包括:捕捉单元(21)、分块单元(22),编号单元(23)、 压缩/解压缩单元(24)、存储单元(25)、显示单元(26)、计算单元(27)、 获取单元(28 );
分块单元(22)用于将游戏地图分解成预置大小的地图块;
编号单元(23)用于对分块单元分解出的地图块进行编号;
压缩/解压缩单元(24)用于将分解单元分解出的地图块进行数据压缩, 或着将获取单元获取的压缩地图块进行解压缩;
存储单元(25)用于存储压缩单元压缩过的地图块数据、存储游戏地图的 标识、每个地图块的编号及每个地图块的存储位置与大小信息;
捕捉单元(21)用于获取玩家的当前坐标位置;
计算单元(27 )用于根据获取的玩家坐标位置计算当前玩家所在的地图编
号,及根据玩家的坐标位置计算需要获得的地图块编号;
获取单元(28)用于根据计算单元计算出的地图编号、玩家需要获得的地
10图块编号来查找压缩地图块的存储地址及大小信息,并获取压缩地图块数据;
显示单元(26)用于将压缩/解压缩单元解压过的地图块显示给玩家。
以上对本发明所提供的基于即时通讯工具的媒体文件更新提示的方法及 系统进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行 了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同 时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用 范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。