我有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];
}
}
现在的问题是,如果我有以下仪表板:
黄色是起点,绿色是终点,粉红色是柔和的碰撞,它将穿过粉红色的瓷砖。
但是我要实现的是避免软碰撞。因此路径为:
但是当没有其他选择时,路径将是:
有什么想法吗?
答案 0 :(得分:1)
似乎合适的策略是两次并两次通过:
1)将永久性和软性碰撞都标记为不可行走。
2)如果没有解决方案,则仅将永久性碰撞标记为不可行走。
如果仍然没有解决方案,那么就没有步行路径。