установка одинаковой скорости

у меня есть java код:

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

он делает чтобы объект двигался в определённую точку.

x,y-позиция объекта
enemy_pos_x,y-позиция точки б
t_pos_x,y-позиция точки а

Проблема в том, что шарик летит с разной скоростью и прилетает всегда с одним временем полёта, надо установить одинаковую скорость.

этот код находится в таймере


Ответы (1 шт):

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

Кинематика: <положение> = <время> * <скорость>. Вам нужно задать вектор скорости пули (vx, vy). Я буду считать что величина скорости постоянна и хранится в bullet_speed.

Направление на врага:

dx = enemy_pos_x - t_pos_x;
dy = enemy_pos_y - t_pos_y;

Расстояние до врага:

dist = (dx ** 2 + dy ** 2) ** 0.5;

Скорость по направлению к врагу:

vx = bullet_speed * dx / dist;
vy = bullet_speed * dy / dist;

Стартовая точка пули:

x = t_pos_x
y = t_pos_y

В цикле по таймеру находите промежуток времени, умножаете его на скорость, добавляете к координатам пули:

dt = now_t - prev_t;
x += vx * dt;
y += vy * dt;
→ Ссылка