斜视角图形引擎的设计

动态地表的实现

[上篇:地表的数据组织及滚屏][下篇:物体的绘制及遮挡运算]


如前面所述,所谓动态地表.就是指诸如水波,火焰等效果,它属于地表的范畴,可以和精灵,物体共存, 比如玩家有可能站在水面,或被风吹动的草地上.初看起来,我们可以将它们当作固定位置的精灵来处理. 但出于引擎效率的考虑,将其单列出来,原因如下:

需要实现的动态地表,仍是属于地表的范畴.处于屏幕图象的最底层.仅仅是给地表 增加一些动画效果而已,它不会与其它对象产生遮挡关系,一般需要动态地表的区域占屏幕空间 的比例都不小,像水域,草坪,等等.如果将其做为一般的精灵,绘制时由于和其它对象发生了遮挡关系, 每次更新屏幕的时候,就将造成更多的重画操作.实际上,动态地表将被静态物体遮挡的部分 是可以在游戏设计中就预算好的.

水波 (2688字节)
动态水波 (7045字节) 动态水波 (7045字节)
动态水波 (7045字节) 动态水波 (7045字节)
图 1-1
图 1-2

一般的动态地表是些重复的块状图,我们不必像静态地表那样以整张图片存放.以水波的制作为例, 先制作好水波静态图象为设计地图时所用(图 1-1)再制作出动态的水,注意要使之本身能上下左右衔接的自然. 如图 1-2 所示,就是4张动画拼起来的.

下面将制作一简单的地表:
静态地表 (2240字节) 地表掩图 (1375字节) 添加水波 (4081字节) 混合地表 (3589字节)
图 2-1
图 2-2
图 2-3
图 2-4

图 2-1,是一简单的地表图.中间的白色空了出来,是一条河,准备在里面加上动态的水波. 如果还有些物体,也应当画上去,直到排满所有的静态对象,留下河流可见的部分. 这时应该制作一地表掩图(图 2-2)表示动态地表的范围,掩图占内存多少? 一个字节描述 8 个点. 640x480 的图大小为 38.4k, 保存在外存中时还可以用简单的行压缩得到很高的压缩比. 下一步将水波贴上来,记住贴了几块,每块的坐标.(图 2-3) 当游戏工作时,贴动态地表的过程中,应该和地表掩图相比较.裁掉不显示的部分,就可以得到图 2-4 ;-) 当我们以固定的频率顺次贴动态地表的各帧,便可以得到相当好的效果.

以前的游戏采用的比较多的是 256 色,利用调色板动画可以也得到相当好的效果,同时算法更简单. 云风一直热衷于使用 256 色, 不过在前段时间不断的和朋友们的争论中, 想通了, 使用 16bit 甚至 24bit 色已经是大势所趋, 更重要的是, 16bit 在处理 Alpha 混合时更简单,效果更好, 在此不再讨论调色板.�