2013-07-05 2 views
1

Я надеялся получить некоторую помощь с псевдо-кодом моих 2D Java игры,найти объект, ближайший к месту назначения при использовании первопрохождение

enter image description here

Монстры (оранжевые шары) бегут по черной линии через Pathing координаты (Point):

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 и т.д ...

Черный квадрат должен выглядеть так, будто он стреляет в монстров, а зеленый круг - это стрельбище. Но как мне решить, куда идет пуля? Я бы предпочел, чтобы черный квадрат выстрелил в толпу спереди, но так как мобы могут замедляться/оглушать, а потому не в определенном порядке, откуда я знаю, какая толпа больше всего впереди?

+2

Предполагая, что черный рельс не изменяется (в пределах раунда), тогда пройденное расстояние должно это сделать. Даже если это произойдет, это будет угловой случай. –

+0

100% доказательство дурака будет состоять в том, чтобы спросить объект, который сгенерировал черную рейку, чтобы отметить, сколько блоков осталось от конкретной точки преследования, чтобы добраться до конца. Тогда монстру можно просто дать этот параметр. Пушка затем спрашивает всех монстров в диапазоне, насколько дальше они должны идти до конца и нацеливается на ту, которая имеет наименьшее число –

+0

@Richard Tingle Ofc! пройденное расстояние! –

ответ

1

Простейшим решением было бы, чтобы каждый трек-монстр проходил его расстояние (а не время его жизни, из-за разных скоростей, ошеломляющих и т. Д.), А затем нацеливал ту, которая проделала самое длинное расстояние. Предполагая, что черный рельс не изменится, это позволит монстру, ближайшему к концу, быть нацеленным.

Если черная рейка сильно изменилась (из-за размещения новых башен), попросите объект, который сгенерировал черную рельс (и регенерирует его на месте размещения башни), чтобы отметить, сколько блоков осталось от конкретной точки преследования, чтобы добраться до конец (он уже знает путь, поэтому это должно быть достаточно простым, я предполагаю, что вы используете алгоритм A * или аналогичный для генерации этого пути, и если это число в значительной степени просто выпадает из алгоритма). Тогда монстру можно просто присвоить это значение в своем обновлении chasePoint. Пушка затем спрашивает всех монстров в радиусе действия, насколько дальше они должны идти до конца и нацеливается на ту, которая имеет наименьшее число