如何使用easystarjs尽可能地遵循方式

时间:2014-04-25 08:15:54

标签: javascript path-finding

我使用easystarjs https://github.com/prettymuchbryce/easystarjs并从页面上的示例开始。

var grid = [[0,0,1,0,0],
            [0,0,1,0,0],
            [0,0,1,0,0],
            [0,0,1,0,0],
            [0,0,1,0,0]];

//startX, startY ,endX, endY, callback        
easystar.findPath(0, 3, 4, 3, function( path ) {
            path = path || [];
            for(var i = 0, ilen = path.length; i < ilen; i++) {
                //console.log(path[i].x, path[i].y);
                marker.drawRect(path[i].x*32, path[i].y*32, 32, 32);
        }

    });

如果我运行代码,没有办法抽出,因为它没有完整(路上有一个第一号墙)。是否有可能修改代码,而不是只是说没有找到路径(或没有绘图),我希望代码尽可能地绘制方式(到墙上)。

如果我将一个数字1改为数字零(并创建一个段落),代码就可以工作。

1 个答案:

答案 0 :(得分:0)

该函数将返回不同的结果,具体取决于您转向1 0所以“尽可能”与此相关。

只要这样做,如果路径是空的,你就这样填写:

currentX = startX;
currentY = startY;
path = [];

while(grid[currentY][currentX] != 1){
  path.push({x: currentX, y: currentY});
  dX = endX - currentX;
  dY = endY - currentY;
  distanceX = Math.abs(dX);
  distanceY = Math.abs(dY);
  directionX = dX / distanceX;
  directionY = dY / distanceY;
  // Make a step in the direction where the distance is bigger
  if(distanceX > distanceY){
    currentX += directionX;
  }else{
    currentY += directionY;
  }
}

这将是到目的地被隔离墙打断的一条直线。