Нахождение объекта, ближайшего к месту назначения, при использовании поиска пути
Я надеялся получить некоторую помощь с псевдокодом моей 2D-игры Java,
Монстры (Оранжевые шары) бегут по черной линии через координаты пути (Точка):
if(i.monsterx < i.chasePoint.getX()){
i.monsterx++;
}else if(i.monstery < i.chasePoint.getY()){
i.monstery++;
}else if(i.monsterx > i.chasePoint.getX()){
i.monsterx--;
}else if(i.monstery > i.chasePoint.getY()){
i.monstery--;
}
Каждый раз, когда монстр достигает "ChasePoint", он получает новую ChasePoint и т.д...
Черный квадрат должен выглядеть так, будто стреляет в монстров, а зеленый круг - стрельбище. Но как мне решить, куда попадает пуля? Я бы предпочел, чтобы черный квадрат стрелял в моба спереди, но поскольку мобы могут быть замедлены / оглушены и поэтому находятся не в определенном порядке, как я узнаю, какой из мобов самый длинный впереди?
1 ответ
Простейшим решением было бы, чтобы каждый монстр отслеживал пройденное расстояние (а не время, которое он прожил; из-за разных скоростей, потрясающих и т. Д.), А затем нацеливался на того, кто прошел самое длинное расстояние. Предполагая, что черный рельс не меняется, это позволит монстру, ближайшему к концу, быть целью.
Если черный рельс сильно меняется (из-за размещения новых башен), то попросите объект, который сгенерировал черный рельс (и регенерирует его при размещении башни), отметить, сколько блоков осталось у конкретной точки преследования, чтобы добраться до конца (это уже знает путь, так что это должно быть достаточно просто; я предполагаю, что вы используете алгоритм A* или аналогичный для генерации этого пути; если это так, это число в любом случае просто выпадает из алгоритма). Тогда монстру можно просто присвоить это значение в его обновлении chasePoint. Затем пушка спрашивает всех монстров в радиусе действия, насколько далеко они должны идти до конца, и нацеливается на того, у кого наименьшее число