斜视角游戏制作初步

斜视角已经成了目前RPG游戏的一个标准,它比普通的垂直视角在视觉表现方面要更胜一筹,但是也带来了一些不便。

  先讲一下地图的拼法。现在的RPG、战棋和即时战略游戏的地图还是用一块一块的小图素(Tile)拼起来的,这样主要为了节省内存,但对美工的要求要高一些。而且斜视角的Tile是一个菱形,比之垂直视角的矩形Tile拼起来要复杂一些。

  假设我们每个地图单元(即是下图中红线框出的一个矩形)的大小是32x16像素,那么这个Tile的大小则是32x15像素(如左图),而不是32x16像素。因为在交界处理论上线的宽度是0,但实际上像素是有宽度的。将这个Tile像下图一样交错着拼起来,刚好严丝合缝,上下每个标号相同的Tile的间距刚好是16个像素。

  再讲一下斜角格子的判断,这在随便哪种用鼠标操作的游戏里都是最重要的一个步骤。在斜视角游戏中,因为每个Tile都是菱形的,所以要判断光标所在Tile的位置要比垂直视角的位置判断难上一些,可以这样来做。 将Tile的标号按右图的方式排列,蓝色和黄色分别代表不同的行,但列标号相同的Tile的位置在水平坐标上是一样的,当然会有一些浪费,这也是没有办法的。然后将整个屏幕(假设屏幕大小即是右图的大小,但是有一点要注意,就是屏幕的左上角点最好是一个Tile的中心点,将左上角中心相对于大地图Tile[0,0]中心的位置记为[origin_x,origin_y])按Tile的大小划分为MxN块矩形区域(如右图红线的框法),将光标在屏幕上的位置加上[origin_x,origin_y],就得到了光标在整个地图上的位置。判断鼠标在哪一个矩形区域中,即可知道矩形区域中心Tile的位置,也就知道了这个Tile的中心点的位置。

  下面就是个几何问题了,以[0,0]为中心、在x轴和y轴上截距分别为kx,ky的菱形的内部点的坐标的方程是什么?都该知道吧,即是:ky|x|+kx|y| < ky*kx

  如果光标不在中心Tile中,再判断一下光标相对于矩形区域中心的偏移,根据值的正负很容易就判断出光标是在邻近的哪个Tile中了。下面是判断光标位置的源代码。其中px,py是光标在大地图上的位置,mx,my是Tile的位置(这里是以每个Tile大小是64x31计算的)。

#define ABS(x) ((x)>0 ? (x) : -(x))
kx = (px&63)-31;
ky = (py&31)-15;
mx = px>>6;
my = py>>5;
cx = ABS(kx);
cy = ABS(ky);
mx = mx*2+1; // 矩形区域中心的Tile的列号都是奇数
if(cx+2*cy >= 32)
{
 if(kx > 0)
  if(ky > 0)
   mx++, my++;
  else
   mx++;
 else if(ky < 0)
  mx--;
 else
  mx--, my++;
}

  关于斜视角游戏的值左暂时先讲到这儿,下次再见。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值