几乎我们所知的所有2D游戏主机都采用tile模式,GBA也是如此,GBA的6种背景模式中,其中三种是tile模式,另三种是位图模式。而在任天堂的官方手册上面,很明确地说明三种位图模式是用来显示静止图片或者动画的,并不建议用来进行游戏设计。
对长期进行PC软件开发的我们tile模式看起来就像一个怪物,和位图模式相比就好象是Dos那个字符终端和Windows的图形界面那样对比鲜明。我的一个好朋友,一个资深的程序员,就跟我说tile太不直观了,没有任何意义。事实上,我们知道即使很多PC机游戏也在利用类似tile模式一样的机制。比如C&C等等,一般来说,在PC机上这种机制叫做地图机制。
这里我们打算用量化的方法来比较tile模式和位图模式,当然指标就是做掌机游戏的开发者最关心空间和速度。
首先,我们来看空间的问题:
这里我们用来比较的是GBA的模式0(tile)和模式4(位图),这两种模式都是用得相当广泛的。另外我们拿它们做比较,也是因为它们的颜色模式是一致的。他们的颜色模式都是同屏256色,一个调色板,模式0的图块大小是8*8。
现在我们假设我们要制作的游戏里面有100个独立场景都是240*160大小的,那么我们可以计算出来模式4需要的图片数据空间为:
100(张)*240*160*1(字节)≈3.66m
这时候我们发现模式0的图片数据空间计算并不是一个简单的事情,因为需要的图块数量是不确定的,这和游戏本身有大的关系。我们首先计算如果所有的图块都是不重复的,那么一个240*160的场景需要:
240*160/8/8=600个
也就是说,一个场景需要的图块数目假设为,那么0<n≤600。我们知道一个图块占用64字节。那么,n个图块占用的空间就是64n。
另外,我们知道tile模式下,还需要存储地图信息。在模式0下这个部分的空间占用是(一个图块的索引占2个字节):
240*160/8/8*2=1200字节
所以模式0下,图片数据空间大小应该为:
(1200+64n)*100=120000+6400n=120k+6.4k*n
现在我们来比较模式4和模式0占用的图片数据空间:
3.66兆/120k+6.4k*n
我们可以简单的算出在某个极端情况下,即n=600的情况下,模式0比模式4多占用120k空间。然而当另一个极端的时候,即n=1的情况下,模式0只占用120k+64字节的空间,这时模式4占用的空间是模式0的30倍。我不能给出一个一般的游戏中图块重复率的大小,所以我们只好假设一般来说重复率为z,z=n/600。我们可以得出当z=1的时候,模式4和模式0在空间占用上,没有显著差异。当重复率为z的时候,模式0的空间占用是:
120k+6.4k*600*z≈3.66兆*z
也就是说,重复律是多少我们模式0相对于模式4的空间节省就是多少。当重复率z=50%的时候,模式0的空间占用为1.88兆。
直观上,我们可以对一个游戏的图块重复率z有一个认识,比如下面是著名的Gba游戏口袋怪兽手中的一个场景,我们直观的估计z肯定小于50%。
在这类的游戏,RPG,战旗等等z都是很小的,也就是说能够很节省空间。而如果游戏大量采用没有重复图块的背景那么tile并不会节省空间,但是也不会浪费多少空间。
明天,我们继续讨论tile模式在速度中的意义,我们将结合对硬件如何实现tile模式进行讨论。欢迎大家对这个问题发表意见,也请支持这个讨论。