Я решил забрать свой старый 2D-движок с самого начала и продолжить работу над ним. Это моя первая попытка попытаться реализовать некоторый базовый ИИ для врагов, и у меня есть некоторые вопросы. Ниже приведен пример того, как я отношусь к ИИ для врагов.A * Algorithm 2D Game Pathing issues
Если игрок находится в пределах определенного диапазона противника, противник движется по направлению к игроку, просто проверяя, если он вверх или вниз, влево или вправо от игрока и корректируя это координаты соответственно.
Если враг попадает на препятствие, которое блокирует его движение в направлении игрока, я вызываю алгоритм My A * для определения кратчайшего пути к игроку и перемещения по препятствиям.
Я проверяю, не враг ли больше заблокирован каждый кадр, и если он затем снова вызывает алгоритм A * для настройки движущейся позиции игрока.
Способ, которым я реализовал A *, я проверяю смежные квадраты на основе размеров Врага. Так, например, если у меня есть 60X60 Enemy, я буду проверять соседние плитки в этом измерении, а также враги могут быть разных размеров. Проблема я столкнулся выглядит следующим образом:
Say враг черный квадрат. Он проверяет, что это смежные плитки, и может перейти на квадрат перед ним, так как он не сталкивается с любыми объектами в этом квадрате. Как только он находится на верхнем квадрате, он может поместиться на правый квадрат без столкновения. Теперь для этого сценария:
Произнесите A * алгоритм вызывается, когда противник находится в положении черного ящика. Теперь из-за того, что врагу не требуется перемещаться между верхней стеной, произойдет столкновение и на основе моего алгоритма это заставит противника игнорировать этот блок.
Так что мой вопрос: какой был бы наиболее распространенный способ решения этой проблемы. Возможно, что-то глупое, которого я пропускаю, но я думал, что попрошу. Надеюсь, я объяснил, что у меня достаточно хорошо, если вам нужно какое-либо разъяснение, просто спросите. Заранее спасибо.
Я лично не понял, где проблема, однако, я думаю, что способ, которым вы используете алгоритм, может привести к странному поведению, поскольку вы используете его только при попадании препятствие, представьте себе вертикальную трубку, противник находится на вершине, и он пытается дотянуться до игрока, который находится под трубой, тогда враг спустится вниз, так как он еще не ударил ни одного препятствия, и когда он достиг дна труба, которая является препятствием, алгоритм затем вычислит путь, который будет идти назад (вверх по трубе), но как только он поднимется, не будет препятствий, он снова опустится. Скажите, если я ошибаюсь –