查找路径,避免软碰撞

时间:2019-07-18 22:59:21

标签: javascript path dashboard path-finding

我有x,y仪表板10x10。我有目的地x,y的数组,我需要从中找到最接近的位置及其路径。

我也有一系列的软碰撞和一系列的饰品碰撞。

我正在使用寻路包来查找路径。我正在像这样设置小饰品碰撞:

//set collisions
for(let i = 0; i < mapData.collisions.length; i++) {
    grid.setWalkableAt(mapData.collisions[i].x, mapData.collisions[i].y, false);
}

我正在找到实际最接近的坐标及其路径,如下所示:

//find actual closest coordinate and its path
for(let i = 0; i < destinationCoords.length; i++) {
    currentGrid = grid.clone();
    currentPath = finder.findPath(heroCoords.x, heroCoords.y, destinationCoords[i].x, destinationCoords[i].y, currentGrid);

    if(currentPath && currentPath.length !== 0 && currentPath.length < closestPathLength) {
        closestPathLength = currentPath.length;
        closestPath = currentPath;
        closestCoords = destinationCoords[i];
    }
}

现在的问题是,如果我有以下仪表板:

enter image description here

黄色是起点,绿色是终点,粉红色是柔和的碰撞,它将穿过粉红色的瓷砖。

但是我要实现的是避免软碰撞。因此路径为:

enter image description here

但是当没有其他选择时,路径将是:

enter image description here

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

似乎合适的策略是两次并两次通过:

1)将永久性和软性碰撞都标记为不可行走。

2)如果没有解决方案,则仅将永久性碰撞标记为不可行走。

如果仍然没有解决方案,那么就没有步行路径。