Найдите путь, избегайте мягких столкновений

У меня есть приборная панель 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];
    }
}

теперь проблема в том, что если у меня есть следующая панель инструментов:

Найдите путь, избегайте мягких столкновений

где желтый — начальная точка, зеленый — конечная точка, а розовый — мягкое столкновение, он просто пройдет через розовую плитку.

Но чего я хочу добиться, так это избежать мягких столкновений. Таким образом, путь будет:

Найдите путь, избегайте мягких столкновений

Но когда нет другого варианта, путь будет таким:

Найдите путь, избегайте мягких столкновений

Есть идеи?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
37
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Кажется, что подходящей стратегией будет два запуска два прохода:

1) Пометить как постоянные, так и мягкие столкновения как непроходимые.

2) Если решений нет, помечать как непроходимые только постоянные столкновения.

Если решений по-прежнему нет, значит, нет проходимого пути.

Хм, не знаю, почему я не подумал об этом. Спасибо, я попробую, и если все будет хорошо, я отмечу этот ответ

BT101 19.07.2019 01:16

Другие вопросы по теме