Прогнозирование стрельбы по алгоритму в java - PullRequest
0 голосов
/ 27 февраля 2019

У меня проблема в моем нынешнем игровом хобби.У меня есть две единицы, которые враждебны в 2D-пространстве.Один из них стреляет прямо в противника, поэтому, если он двигается, он промахивается.Но другой должен предсказывать движение своих противников и стрелять «вперед».

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

Я попытался с помощью аппроксимаций вычислить расстояние между A и B, а затем использовать Bv и угол ориентации, чтобы вычислить, где B будет в следующую секунду, а затем масштабировать, чтобына расстоянии двух игроков, деленное на скорость пули.Но это очень неэффективно и плохо работает.

float distanceK = MathUtil.distance(unit.x, unit.y, opponent.x, opponent.y) / Constants.BULLET_VELOCITY;

float x = (float) (opponent.x + (Constants.UNIT_FORWARD_VELOCITY * distanceK * Math.cos(opponent.orientationAngle)));
float y = (float) (opponent.y + (Constants.UNIT_FORWARD_VELOCITY * distanceK * Math.sin(opponent.orientationAngle)));

float angleToRotate =  MathUtil.angleBetweenUnitAndPoint(unit, x, y);

В приведенном выше примере я затем использую переменную angleToRotate, чтобы определить, сколько мне нужно повернуть, чтобы поразить противника, но вращение тоже требует некотороговремя (54deg / s)

Мне нужно более оптимальное решение для этой проблемы.

а) предсказывать движение противника, когда вы стоите.

b) предсказывать движение противника, когда вы двигаетесь.

1 Ответ

0 голосов
/ 27 февраля 2019

Вы можете использовать векторное представление пространства.Таким образом, BA будет представлять вектор между A и B с точки зрения A.Затем вы можете добавить вектор Bv скорости единицы В.Результирующий вектор будет вектором между B и Bvp прогнозируемой позиции B в некоторый момент времени t в будущем.Что касается расчета движущихся, вам также необходимо учитывать вектор движения A.

...