手机游戏引擎中的背景绘制.docx

上传人:b****8 文档编号:9989569 上传时间:2023-02-07 格式:DOCX 页数:11 大小:140.84KB
下载 相关 举报
手机游戏引擎中的背景绘制.docx_第1页
第1页 / 共11页
手机游戏引擎中的背景绘制.docx_第2页
第2页 / 共11页
手机游戏引擎中的背景绘制.docx_第3页
第3页 / 共11页
手机游戏引擎中的背景绘制.docx_第4页
第4页 / 共11页
手机游戏引擎中的背景绘制.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

手机游戏引擎中的背景绘制.docx

《手机游戏引擎中的背景绘制.docx》由会员分享,可在线阅读,更多相关《手机游戏引擎中的背景绘制.docx(11页珍藏版)》请在冰豆网上搜索。

手机游戏引擎中的背景绘制.docx

手机游戏引擎中的背景绘制

 

TiledBackground

ForNewEmployeeTraining

 

DocumentID:

Department:

Programming

Author(s):

CaoHeng

Editor(s):

CaoHeng

Date:

2005.01.18

Version:

V0.001

RevisionHistory

Version

ChangeDescriptions

Date

Editors

V0.001

Create

01/18/2005

CaoHeng

Approval

Name

Function

Dept.

Date

Signature

TableofContents

1Introduction4

1.1PurposeandScope4

1.2Abbreviation4

1.3Reference4

1.4Other4

2TiledBackground4

2.1什么是TiledBackground4

2.2TiledBackground的数据结构5

2.3TiledBackground显示算法5

2.3.1逐块绘制法5

2.3.2缓冲绘制法5

2.3.3多层背景5

ListofTables

Table21Thefirsttable’scaption.5

Table22Thesecondtable’scaption.5

ListofFigures

Figure21Thefirstfigure’scaption.5

Figure22Thesecondfigure’scaption.5

1

Introduction

1.1PurposeandScope

游戏引擎作为游戏制作的基础是保证游戏质量的最重要部分,目前主要包括两方面:

背景绘制和动画播放。

为了使新员工对目前开发的手机游戏能够有深入的了解,此文档详细描述了目前使用的背景绘制的原理和具体实现方法。

1.2Abbreviation

GDGameDesign

BGBackground

1.3Reference

[1]CaoHeng,Gameloft,“TrainingMinutesForGameTools”,V0.002.

2TiledBackground

2.1什么是TiledBackground

游戏场景中的背景要展现出一副巨大的图像,它是游戏设计者表现游戏环境和氛围的重要手段。

无论对于PC游戏还是其他平台的游戏,巨大的背景都会带来容量问题,而容量对于手机游戏更是十分宝贵的。

为了使用尽量少的图绘制出尽量多的背景,背景图像由无数的等大小的图形组成,这些图形通常使用正方形。

而这些图形的种类是有限的,只是每一个都可能被使用了很多次。

就好像墙上的瓷砖一样,可以通过有限的种类拼出无限的组合。

那么组成背景的图形就被称为Tile,而使用Tile拼成的背景就被称为TiledBackground。

最后,我们把拼接一副背景所用的所有Tile保存在一张图像中,就构成了我们在游戏中使用的图像资源,我们通常称之为Tileset。

并且,我们会把Tileset中的每一个Tile进行编号,顺序是从左到右,从上到下,如下所示。

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

通过编号,我们可以把组成巨大背景的每一个Tile用该Tile在Tileset中的索引值(Index)表示,如下所示。

4

5

7

18

8

4

5

7

18

8

4

5

7

18

8

9

0

1

11

13

9

0

1

11

13

9

0

1

11

13

10

6

17

2

12

10

6

17

2

12

10

6

17

2

12

3

16

15

19

14

3

16

15

19

14

3

16

15

19

14

4

5

7

18

8

4

5

7

18

8

4

5

7

18

8

9

0

1

11

13

9

0

1

11

13

9

0

1

11

13

10

6

17

2

12

10

6

17

2

12

10

6

17

2

12

3

16

15

19

14

3

16

15

19

14

3

16

15

19

14

4

5

7

18

8

4

5

7

18

8

4

5

7

18

8

9

0

1

11

13

9

0

1

11

13

9

0

1

11

13

我们将这些索引值以从左到右,从上到下的顺序保存起来,就得到了一个连续的索引值的数组。

这样,我们只要拥有Tileset的图像和索引数组就可以得到一副完整的背景了。

2.2TiledBackground的数据结构

通过上一节的介绍,我们可以知道,巨大的背景可通过一张很小的Tileset图和索引数组来绘制出来。

在手机功能允许的范围内,程序还可以对Tile进行水平翻转(XFlip)和垂直翻转(YFlip),这样就可以在背景中使用经过翻转的Tile,用于丰富背景图的内容。

2.2.1XML数据格式

为了通用性和可读性,在编辑阶段我们将Background的索引数组和相关数据保存为XML格式,这样不仅可以在IE等软件中浏览,更可以在Notepad,UltraEditor,HexEditor等工具中进行编辑。

下面是一个XML文件的例子,该格式为公司内部定义。

xmlversion="1.0"encoding="UTF-8"?

>

\mac.png"tilew="16"tileh="16"tilew_t="10"tileh_t="11">

16,16,16,16,-1,16,16,16,16,16,6,16,16,16,16,16,16,16,16,16,6,16,16,16,16,16,

16,16,16,16,6,16,16,16,17,1073741841,16,16,16,16,6,16,2,2,0,1073741824,2,2,2,2,6,16,7,7,5,1073741829,7,7,7,7,6,16,19,11,8,1,11,11,11,19,6,10,19,19,12,1073741836,15,15,19,19,13,14,536870930,536870930,536870930,536870930,536870930,536870930,536870930,536870930,9,18,18,18,18,18,18,18,18,18,4,4,1073741828,1073741828,4,4,1073741828,1073741828,4,4

\phb.png"tilew="16"tileh="16"tilew_t="10"tileh_t="11">

0,0,0,0,0,0,0,0,0,0,3,3,0,0,0,0,0,0,0,0,3,3,0,0,0,0,0,0,0,0,3,3,0,0,0,0,0,0,0,0,3,3,0,0,1,1,0,0,0,0,3,3,0,0,1,1,0,0,0,0,3,3,4,0,1,1,0,0,0,4,3,3,4,4,1,1,0,0,4,4,3,3,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3

在例子中,我们可以看到紫色的为背景图的大小(单位为象素),绿色依次为Tileset图像文件的路径,Tile的宽度,Tile的高度,背景上每行的Tile数量,背景上每列的Tile数量,棕色即为索引数组。

在索引数组中,每一个Tile的索引用一个4Bytes的整数表示,如果索引值小于0(即二进制中的最高位为1),表示该Tile为空(即没有Tile),为了便于记录,我们将二进制中的次高位和次次高位是否为1,分别用于表示每个Tile是否需要进行XFlip或YFlip。

如例子中的-1就表示该位置没有Tile,1073741828(0x40000004)表示该Tile进行了XFlip。

2.2.2物理层的用途

在上面的XML文件中,有两层背景,第一层用于游戏中绘制背景,可称为显示层(VisualLayer),第二层不用于绘制背景,只以同样的形式记录每个Tile的物理属性,可称为物理层(PhysicalLayer)。

为了给背景上不同的区域划分物理属性,比如有些区域人物可以通过,有些区域不能通过。

我们使用另外一套Tileset拼出与显示层同样大小的物理层,我们的目的只是得到物理层的索引数组,用这套索引数组表示每一个Tile对应位置的物理属性,而不是将物理层画到屏幕中。

2.2.3背景编辑工具

目前我们所使用的背景编辑工具为ezPlayfieldEditor.exe,它是Gameloft-Beijing内部使用的开发工具,由Java语言编写,使用J2SDK1.4.2编译完成,因此在J2SDK1.4.2的环境下才可以正常运行。

它可以创建、读取、保存XML格式的背景数据,由于项目的不断创新,该工具还在不断的修改和完善中。

2.2.4数据格式转换

XML文件并非游戏使用的最终资源,我们必须将XML文件转换为二进制文件,以便于程序使用和减少容量。

所使用的工具为Convert.exe,与ezPlayfieldEditor一样,在公司内部开发和使用。

二进制文件的数据结构与XML文件基本相同,同样包括每张背景的宽、高和Tile的宽、高等信息。

而对使用的Tileset图像文件进行了统一的编号,在二进制文件中只记录背景所用Tileset的编号。

由于各个项目都会对所用的二进制资源进行容量上的优化,所以具体格式不尽相同,这里就不举例介绍了。

大家可以集思广益,不断创新,以达到容量最小,使用最便利的目的。

2.3TiledBackground显示算法

显示算法就是通过二进制文件和Tileset图在屏幕上的绘制背景的算法。

对于手机游戏来说,显示算法的速度是最重要得。

2.3.1逐块绘制法

当屏幕(红色框)要绘制背景上某一区域时,我们将涉及到的Tile(黄色区域)逐块绘制到对应的位置,就是逐块绘制法。

逐块绘制法是显示背景的最基本的方法。

当我们已知屏幕原点(左上角)在背景中的位置时,只要知道Tile的宽高,背景的宽高,就可知道每个涉及到的Tile相对屏幕的位置,用两层循环就可以绘制出来。

但是这种方法有一个致命的缺点,就是每帧都需要将所有涉及的Tile重新绘制到屏幕上,极大的影响了游戏的流畅度。

为了提高速度,于是有了下面的缓冲绘制法。

2.3.2缓冲绘制法

当屏幕在背景中移动时,实际上所涉及的Tile根本没有变化,或者只有一小部分发生了改变。

所以我们可以创建一个背景图像缓冲(buffer),保存当前屏幕的背景图像,减少每帧得画图次数,可以大大提高速度。

当我们创建的图像缓冲和黄色区域大小相同时,如果背景涉及的Tile没有变化,我们只需将缓冲图像画到屏幕的适当位置上。

如果背景涉及的Tile发生了变化,如变为绿色区域,我们只需更新变化的部分Tile到背景缓冲,再将缓冲画到屏幕上即可。

为了保留缓冲图像中已有部分,我们采用滚动更新的方法。

假设,当屏幕向右下移动时,缓冲中最上和最左的Tile已无用(即I、II、III区),我们便将新的最下的Tile保存在最上(I、II区),将新的最右的Tile保存在最左(I、III区),得到新的缓冲图像。

最后,我们将新的背景缓冲分4区,按照实际位置画到屏幕上即可,对应关系如图。

当然,按照屏幕在背景中的位置,我们的缓冲分区会出现四种情况。

●分1个区,刚好背景没有被缓冲切开

●分2个区,背景只在X轴方向被缓冲切开

●分2个区,背景只在Y轴方向被缓冲切开

●分4个区,背景在X、Y轴方向都被缓冲切开(如例子)

2.3.3多层背景

背景和动画的图像是相同的,可以有透明效果。

为了得到更加丰富的游戏背景,我们可以将两层甚至多层背景重叠,使背景的组合更多,更加复杂。

多层背景与单层背景的原理完全相同,也使用一个背景图像缓冲,区别在于更新缓冲时,需要更新多次缓冲,每一个Tile的位置会被多个Tile按顺序更新。

2.3.4游戏背景知识扩展

●背景缓冲的大小

背景缓冲图像的大小要大于屏幕最多可涉及的Tile的区域。

例如:

屏幕大小是128X128,Tile是8X8,缓冲图像至少是

136X136=(128+8)X(128+8)

屏幕大小是120X130,Tile是8X8,缓冲图像至少是

128X144=(120+8)X((130+7)/8*8+8)

屏幕大小是screenWXscreenH,Tile是tileWXtileH,缓冲图像至少是

(screenW+(tileW-1))/tileW*tileW+tileWX(screenH+(tileH-1))/tileH*tileH+tileH

●背景缓冲的内存消耗

背景缓冲虽然可以提高游戏的速度,但是它所占用的内存也是十分巨大的。

在一般手机中,一张图片的大小为长X宽X2。

如背景缓冲的大小为136X136,那么它所占用的内存为36992Bytes。

因为,我们可以认为使用背景缓冲是用内存换取速度的一种手段。

在游戏开发过程中,经常会利用内存换取速度,或者速度换取内存。

●背景缓冲的滚动

当游戏的背景只用到了X轴滚动或者Y轴滚动时,我们的代码就可以进行优化,去掉不需要的滚动代码,可以减少一些容量的负担。

●多层背景的限制

由于多层背景在更新缓冲时比单层背景要更多的绘图操作,因此更新缓冲的速度相对较慢。

对于性能较差和背景滚动频繁的项目不宜使用这种方法。

另外,多层背景必然使用多个Tileset,而Tileset也会消耗大量内存,因此对于内存紧张的项目也不宜使用该方法。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > IT认证

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1