RPG游戏引擎制作——地图篇:斜45度

    RPG游戏中地图占很重要的一部份。它是游戏展开的平台。所以我对使用地图的接口简化的很简单,必然太过复杂带来使用上的不便。
    地图的接口:设置地图大小、设置地图块的大小、地图切换到指定ID的场景、根据指定的图片和地图块的大小生成地图。
    RPG地图一般都是多层的:背景层、遮挡物,还有事件。背景层主要根据地图块进行地图场景的绘制。遮挡物则主要是可能发生事件、产生遮挡和阻挡关系的物体。事件是和地图区域绑定的,实际上也是地图块绑定的。因为角色在不动时或在前进时所有相关的检测都是和地图块相关的。
    这里难点可能还是地图的拼接,地图的绘制都是很简单的事件。而拼接的难点导致了地图遮挡的难点。这里对这几个难点做一介绍:
   
1 地图的拼接:在斜45度中地图的行和一般意义上的行不同,它的行是锯齿形的,先对行上的块进行编号,偶数处于正常意义上的顺序位置,而奇数的则是在偶数的斜45度方向上进行绘制。
   startCol = g.getClipX()/20;endCol = (g.getClipX() +g.getClipWidth())/20 + 2;
    startRow = g.getClipY()/20;endRow = (g.getClipY() +(tmp = g.getClipHeight()))/20 + 2;
    for (int row = startRow - 1; row < endRow; row++) {
      //y = row*tileHeight;
      i = 0;
      if(row < 0 || row >= this.grid[0].length)continue;
      for (int col = ((startCol - 1)<<1); col < (endCol<<1); col++) {
        if(col < 0||col >= this.grid.length)continue;
        x = (col>>1) * this.tileWidth ;
        y = row * this.tileHeight;
       // this.drawCell(g, x, y, col, row);
          this.drawImage(this.tiles,g,x,y,20);
         //绘制奇数列
          col++;
          x = x + halfW;
          y = y+ halfH;
         this.drawImage(this.tiles,g,x,y,20);
      }
    }

2 遮挡的判断:因为是斜45度视角,所以遮挡的判断不能依据90度的判断,单纯的x或y不能比较出谁在前,谁在后。如果我们在自己的视角前画切面,那么与地图的交面出会出现一条与地图坐标成45度的直线,那么这条直线就是我们要进行比较的依据。谁前谁后要看这条线谁离预原点远了。那就是看x+y=b中的b的值大小了。好了,到此因该明白了吧。还有一点就是当b相同时,可能要看谁y大了。OK大家应该明白了吧


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值