движение из точка а в точку б

я делаю игру на 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 шт):

Автор решения: Stanislav Volodarskiy

Загадка: почему пуля летит вертикально? Ответ: потому что у пули не меняется x.

Загадка: почему не меняется x? Ответ: в правой части операторов присваивания нули.

Загадка: почему там нули? Ответ: такое может быть только если враг стоит в нуле (enemy_pos_x = 0). Или очень близко от нуля.

Получается что враги, которые забрались в ноль неуязвимы для пуль!

Как это исправить? Вспомнить школьную кинематику. Какую размерность имеет enemy_pos_x? Метры. А flight_speed? Метры в секунду. А если поделить? Секунды. А что дальше? А дальше вы прибавляете секунды к x, который в метрах.

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

<новое положение пули> = <старое положение пули> +
    <скорость пули со знаком> * <промежуток времени между положениями>
→ Ссылка
Автор решения: megamozg

ответ:

int vx = enemy_pos_x - t_pos_x;
int vy = enemy_pos_y - t_pos_y;
x += vx/flight_speed;
y += vy/flight_speed;

главная проблема, что пуля будет прилетать всегда с одинаковым временем.

→ Ссылка