Прицельный расчет на Tower-Defense - PullRequest
4 голосов
/ 19 сентября 2011

Я строю небольшую игру в защиту башни с друзьями на Java. Теперь мне назначена логика для башен, и в данный момент я пытаюсь выяснить, как башня должна повернуться, чтобы прицелиться и поразить целевого монстра. Поскольку монстр движется, когда башня поворачивается и стреляет, ему нужно стремиться к будущей позиции. Я реализовал функцию, которая дает мне положение монстра в любое время t, а также функцию, которая дает мне меньший угол, необходимый для превращения в монстра, но теперь я запутался, потому что есть три неизвестных переменных:

  • t1 или угол: время или угол, на который башня должна повернуться (указана скорость, с которой башня может поворачиваться)
  • t2 или расстояние стрельбы: время, которое пуля должна пройти, чтобы поразить цель (также указана скорость, постоянная).
  • t3 или расстояние перемещения: расстояние, которое монстр проходит за одно и то же время.

Итак, я ищу решение для:

min(t1+t2) = min(t3)

где целевой монстр все еще находится в зоне действия башни. Я уже думал о расчете с максимально необходимым поворотом и максимально возможным диапазоном, а затем пошагово уменьшением, но мне интересно, есть ли «идеальное» неэвристическое решение?

Ответы [ 2 ]

4 голосов
/ 19 сентября 2011

Для каждой координаты мы можем вычислить время t B , которое нам необходимо иметь в этом месте.Это время поворота плюс время, необходимое для пули ( t 1 + t 2 ).

Самое раннеевремя, когда мы можем поразить монстра, - это первая локация на пути предсказанных монстров, где монстр и пуля имеют свою роковую встречу.

Я бы начал с локации монстров, рассчитал время и места для зверя ирассчитать, если пуля прибудет раньше или позже.

Вы могли бы исключить одну из переменных, если просто включите и отметите каждый градус или отметку, можете ли вы убить монстра, если вы выстрелите сейчас .У вас будет только два вектора (прицеливание, направление движения монстра) с одной точкой пересечения, и вам просто нужно проверить, встречаются ли монстр и пуля там одновременно (расстояние до точки пересечения, скорость).

3 голосов
/ 19 сентября 2011

ДОБАВЛЕННАЯ ИНФОРМАЦИЯ:

Я предполагаю, что данный монстр имеет расстояние D до башни, движется по кратчайшему пути к башне, и башня начинает поворачиваться к монстру. Это ситуация на t=0.

ФИКСИРОВАННЫЕ ТИПЫ:

Если ваша башня поворачивается с угловой скоростью omega, то есть угол phi во время t равен

phi = omega * t

Так что, если вы знаете, что ваша башня должна повернуться на угол phi, пуля будет выпущена в

t = phi/omega

Отсюда расстояние, которое прошла скорость пули v, составляет

s(t) = v * (t-phi/omega)

Если ваш монстр движется со скоростью vm, он будет на расстоянии d

d(t) = D - vm * t

Пуля попадает в монстра, если

s(t) = d(t)

Это уравнение легко решить: просто подставьте d(t) и s(t) и измените условия для получения t:

t = (D + v * phi/omega) / (phi/omega + vm)

И в этот момент пуля пройдет s(t). Если это значение отрицательно, монстр был слишком быстрым и достиг башни до того, как была выпущена пуля

...