
游戏地图制作.docx
4页游戏地图制作游戏地图的制作 是游戏中不可缺少的重要环节之一,像坦克大战,俄罗斯方块,等等要产生游戏地图,除了可以直接使用已经绘制好的位图外,对于一些不太复杂,具有重复性质的地图或场景,有一个好办法就是利用地图拼接的方法,将一小块一小块的小地图组合成较大的地图 地图拼接的优点在于节省系统资源,因为一张大型的地图会占用比较多的内存空间,且加载速度较慢,如果游戏中使用位数较多的大型地图,势必降低程序运行的性能,而且需要相当客观的内存空间 一.平面地图贴图 首先从最基本的平面贴图开始讲起,这种很直观,即利用一张张四边形的小图块组成同样是四边形的大地图,如下图是由三种不同的图块组合而成的平面地图 事实上这张由4*4张小图块组成,程序中使用事先以数组来定义那个位置上要出现哪一张图块,现在假设图中3种不同图块的编号分别为0,1,2,那么可以以下面的二维数组来定义上图 Int mapblock[4][4]={{0,0,1,2},{0,1,1,1},{1,1,1,1},{1,1,1,1}} 而本实例是以一维数组表示的,所以需要将数组的索引值转换成相应的列编号与行编号,转换公式如下: 列编号=索引值 / 每一列的图块个数(行数); 行编号=索引值%每一列的图块个数; 行编号,列编号都是从0开始的,一旦算出了行编号,列编号之后便可以按照图块的宽和高求出图块贴图的位置,下面是计算图块左上点贴图坐标的公式。
左上点X坐标=行编号* 图块的宽度; 左上点Y坐标=列编号* 图块的高度; 注意:也可以应用二维数组,会很方便,但是应定要注意一维和二维分别代表什么,别弄反了,见例子“消灭小星星” 二.斜角地图贴图 斜角地图贴图其实是平面的一种变化,它是将原来的四边形图案变成45度角的菱形图案,并有他们拼接完成,就是一张从45度角俯视的斜角地图了 本例依然采用一维数组,其实原理是一样的只是贴图坐标的位置计算会有所不同而已,下面就说明菱形图块和矩形图块在贴图时的差异如图所示,其中数字是图块的编号 上图中左边是四边形图块的拼接,右边是菱形图块的拼接,四边形图块的拼接方法是:图块编号换算成行编号和列编号在换算成贴图的位置坐标对于斜角地图拼接来说,这些步骤都是一样的,但是在转换贴图位置坐标时,由于只要显示图块中的菱形部分,因此在贴图在排列的方式上会不同,因此贴图坐标的计算公式会不同 因此再合并两个图块的菱形部分时,还需要加上一些透明的步骤,不然就达不到效果,这是显然的如图所示 接下来看看斜角地图拼接时,各个编号与实际排列的情形,如图 上图同样是一张由4*3个小图所拼接而成的地图,其中的数字是图块编号。
对每个图块首先必须算出它的行编号与列编号,然后才能计算它实际的贴图坐标,计算行列编号的方法与平面贴图所使用的公式一样,即: 列编号=索引值 / 每一列的图块个数(行数); 行编号=索引值%每一列的图块个数; 求出了行编号与列编号后,就可以计算出图块贴图时左上点的坐标,除此之外,还需要知道图块中零星部分的长度与高度,这里假设图块中菱形的宽和高是W和h如图所示 那么图块左上点的贴图坐标的计算公式如下 左上点X坐标=xstart+行编号* w/2--列编号*(w/2); 左上点Y坐标= ystart+列编号*h/2+ 行编号*(h/2); 公式中的xstart和ystart是代表第一张图块左上角贴图坐标的位置,以下图所示来说明上面的公式 图中以虚线框比阿士图块真正的矩形范围,在进行贴图时,首先自定义第一张图块的贴图位置,其他图块的贴图坐标在由此图块向下延伸现在假定图块0的贴图坐标是, 那么接下来考虑图块1的矩形范围,它左上角贴图的坐标则是,考虑图块2的矩形范围,它左上角贴图的坐标又变成。
以此类推,再加入行编号与列编号,可以得到下面的这个求图块贴图坐标的公式: 左上点X坐标=xstart+行编号* w/2 左上点Y坐标= ystart+列编号*h/2 但是要注意:这是当图块都在属于同一列的情况下考虑到下一图块4,图块4的左上点的贴图坐标是,而图块5的左上角坐标为以此类推即得到公式了 计算出每块图块的坐标并完成了斜角地图的拼接后,此时要将整块地图贴到窗口上,要知道地图的宽度和高度,计算方法可通过下图来说明由上面可以很容易的推导出整张地图的宽度与高度的计算公式: 地图宽=*w/2; 地图高=*h/2; 三.景物贴图 学会了地图的拼接技巧,我们在介绍如何在地图上布置一些景物,如花草树木和房子等,游戏中少不了景物的点缀 一旦完成了地图的拼接,景物部分就容易多了同样可以使用一个与地图数组相同大小的数组来定义哪个图块位置上要出现马些景物,但是由于景物图的大小与图块的大小并不一定相同,因此还要将景物贴图的坐标稍作修正,使得这些景物可以出现在正确的位置上,下面以在64*32的斜角图块上贴一张50*60的树木来说明,如图: 从图中可以看出,若斜角图块的贴图坐标是那么树木图的x坐标必须向右移动32-25=7个单位,y坐标则必须向上移动60-16=44个单位,则树木图的贴图坐标为。
按照这样的方法,在对其他景物实际的贴图坐标进行修正,最后就可以得到所要的地图场景了 接下来的例子是在斜角地图中加入两个不同的景物,展示不同的新面貌。
