寻找路径避免软碰撞
Find path avoid soft collisions
我有 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];
}
}
现在的问题是,如果我有以下仪表板:
其中黄色是起点,绿色是终点,粉色是软碰撞,它只会穿过粉色瓷砖。
但我想达到的是避免软碰撞。所以路径是:
但是当没有其他选择时,路径将是:
有什么想法吗?
似乎合适的策略是两次 运行 两次通过:
1) 将永久碰撞和软碰撞都标记为不可行走。
2) 如果没有解决方案,则仅将永久碰撞标记为不可行走。
如果仍然没有解决方案,则没有可走的路。
我有 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];
}
}
现在的问题是,如果我有以下仪表板:
其中黄色是起点,绿色是终点,粉色是软碰撞,它只会穿过粉色瓷砖。
但我想达到的是避免软碰撞。所以路径是:
但是当没有其他选择时,路径将是:
有什么想法吗?
似乎合适的策略是两次 运行 两次通过:
1) 将永久碰撞和软碰撞都标记为不可行走。
2) 如果没有解决方案,则仅将永久碰撞标记为不可行走。
如果仍然没有解决方案,则没有可走的路。