斜45度2d游戏地图

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

斜45度游戏是以前绝大部分2D游戏里的经典作法,例如《星际

看下我和阿林及cool在2001年制作的斜45度单机rpg《新游客剑心传》截图:
游戏可在网上搜索,还有下载

因为游戏是2D游戏,视角是固定的,为了使摆放的房子不是很整齐的横竖放,
因此使用了45度斜对称地图,这样使游戏看起来更自然。

一。坐标系
又因为碰撞用了格子式标记障碍的碰撞,因此寻路坐标系统要做得跟斜45度
一样,这样的地形应该是四边菱形的。

但是实际上我们的地图是方形的,所以我们得有两套坐标系统:
一套是仅供AI寻路用的(菱形)
一套是渲染等其它用的(方形,也就是我们实际的整块地图样子)
关于它们的转换可用下图表示:

红色数字标识的是渲染用的坐标
黑色数字标识的是寻路用的坐标

对该图的算式说明:

红色二维数组转黑色二维数组

if(红Y%2==1){

   黑Y=INT(红Y/2)+红数组宽度-1-红X;

   黑X=INT(红Y/2)+红X;

}else{

    黑Y=红数组宽度-2+INT(红Y/2)-红X;

    黑X=INT(红Y/2)+红X

}

黑色二维数组转红色二维数组

假设最后的红Y为偶数 则公式为:

     红Y=黑X+黑Y+1-红数组宽度+1;

     红X=(黑X-黑Y+红数组宽度-2)/2

否则公式为:

     红Y=黑X+黑Y+1-红数组宽度+1

     红X=(黑X-黑Y+红数组宽度-1)/2

对于给定任意的黑点,我们先代入第一个公式,当求得的红Y不为偶数时,我们去代入第二个公式

其中红数组宽度=地图的宽度/菱形的宽度+1

二。遮挡:
为了实现遮挡可将物件分块,例如一个房子可把人物可遮挡的地方横向按格子
为单位进行切割分成多块,而人物永远遮挡不住的房顶可直接切成一大块,如下图:


原图(2001年作的一个demo):

三。寻路:
   关于寻路可用A*算法,网上搜索一大堆。也可以参见这里:

http://msn.shandian.biz/10.html


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

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