RPG游戏45度角地图映射数组的问题解决方法思路

2012年1月17日 发表评论 阅读评论

最近在写一个RPG游戏,生成地图的时候遇到一些问题,在些记录一下,在此我们只考虑行走遇到障碍物的问题

如图,我们把生成45度角地图的一个小菱形称之为图元,由于图片只能存长方形的,所以我们的真实图元如图中央红色标示出来的
接下来我们要把这一个个图元映射到一个二维数组,这样在人物行走的时候,只需根据人物所在的位置,及行走的方向,就可得出人物下一个行走到的二维数组的下标,
根据这个下标,去二维数组中取得对应的值,就可以进行判断能否行走,从而控制人物的前进与否

对于地图的尺寸,我们尽量让它是图元尺寸的整数倍,这样有利于程序的处理

如上图中我们的宽度或高度都正好是图元宽或高的整数倍。

有了地图的大小,我们来确定二维数组的大小。
假设地图地宽为W,高为H,图元的高为h,宽为w
待求的二维数组的长度为yLength,宽度为xLength;

则有yLength=H/h*2 //因为45度的图元上下有一半的交叉
    xLength=W/w
    xLength=yLength/2+xLength;//yLength/2要取整数部分
最后得到的yLength,xLength不需要再加1 因为数组的第一个元素从0开始

好了 这样二维数组的大小确定以后
我们来做对图元映射到数组中的操作

注意在以下的说明中我们把00点设置在左上角刚好露出下半部分的图元上 露出1/4是不行的

我们假设图元所在的行为y 列为x 它也对应了二维数组中的y行x列

在第n行 第1个图元所对应的y即是行数n,那么列数x=y/2 得到的x取整数即可。比如第5行时 x=2 也就是第5行第1个图元对应的二维数组的下标是5,2

第n行第1个图元所指图元在地图上能看到的,不管看到多少,看不到的忽略不计

然后这n行以后的图元所对应的下标x在前一个基础上加1即可

对于人物的行走,上下行走时,只需要更改人物的y下标即可,左右行走时要同时更改y与x 详情请参考示例图

地图坐标转换成数组下标:

    arrY=mapY/h*2

    arrX=arrY/2+mapX/w

数组下标转换成地图坐标:

       mapY=arrY*h/2

       mapX=(arrX-arrY/2)*w-arrY%2==0?0:w/2;

声明:本方法由个人感悟所得,不代表当前所有基于45度的RPG游戏均是这样做的地图,仅供学习探讨。切记切记!


转载请注明来自:[MSN Spaces]http://msn.shandian.biz/12.html

  1. 本文目前尚无任何评论.