движение из точка а в точку б
я делаю игру на java и мне надо сделать пули, которая летит от башни к врагу вот мой код:
if (enemy_pos_x <= x) {
x -= enemy_pos_x / flight_speed;
} else {
x += enemy_pos_x / flight_speed;
}
if (enemy_pos_y <= t_pos_y) {
y -= enemy_pos_y / flight_speed;
} else {
y += enemy_pos_y / flight_speed;
}
но пуля летит просто вверх. (этот код находится в таймере) x=x позиция пули y=y позиция пули остальное понятно.
Ответы (2 шт):
Загадка: почему пуля летит вертикально? Ответ: потому что у пули не меняется x.
Загадка: почему не меняется x? Ответ: в правой части операторов присваивания нули.
Загадка: почему там нули? Ответ: такое может быть только если враг стоит в нуле (enemy_pos_x = 0). Или очень близко от нуля.
Получается что враги, которые забрались в ноль неуязвимы для пуль!
Как это исправить? Вспомнить школьную кинематику. Какую размерность имеет enemy_pos_x? Метры. А flight_speed? Метры в секунду. А если поделить? Секунды. А что дальше? А дальше вы прибавляете секунды к x, который в метрах.
С размерностями полная неразбериха. Чтобы это исправить нужно отделить координаты от скоростей, добавить время и записать кинематическую формулу для равномерного движения:
<новое положение пули> = <старое положение пули> +
<скорость пули со знаком> * <промежуток времени между положениями>
ответ:
int vx = enemy_pos_x - t_pos_x;
int vy = enemy_pos_y - t_pos_y;
x += vx/flight_speed;
y += vy/flight_speed;
главная проблема, что пуля будет прилетать всегда с одинаковым временем.