我使用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改为数字零(并创建一个段落),代码就可以工作。
答案 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;
}
}
这将是到目的地被隔离墙打断的一条直线。