Поиск пути в 2D пространстве - PullRequest
0 голосов
/ 03 апреля 2020

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

self.bat_x += (player_rect.centerx - self.rect.centerx) / 60
self.bat_y += (player_rect.centery - self.rect.centery) / 60

Здесь отслеживание пути работает нормально. Я делю каждое значение на 60, чтобы враг не просто появлялся и приставал к моему игроку / чтобы замедлить движение врага вниз. Однако чем дальше враг, тем быстрее он. Чем ближе летучая мышь становится, тем медленнее летучая мышь становится. Это связано с тем, что, например, при использовании оси X, когда расстояние между игроком и противником меньше, player_rect.centerx - self.rect.centerx меньше, поэтому к self.bat_x добавляется меньше. Есть ли способ, чтобы поиск пути все еще работал, но скорость была постоянной? Или кто-нибудь знает другой метод поиска пути и как его реализовать?

Ответы [ 2 ]

1 голос
/ 03 апреля 2020

Одним из способов было бы использование местоположений игрока и врага, чтобы найти наклон / угол линии, соединяющей их.

Учитывая, что враг находится в точке (x1, y1), а игрок в точке (x2, у2). Тогда

angle = arctan((y2 - y1)/x2-x1))

Обратите внимание, что x2 - x1 может быть нулем, поэтому позаботьтесь об этом случае.

После нахождения линии вы можете использовать полярные координаты, чтобы найти следующую позицию

Например,

x += speed * sin(angle)
Y += speed * cos(angle)
0 голосов
/ 03 апреля 2020

Пифагор - твой друг

x = player_rect.centerx - self.rect.centerx
y = player_rect.centery - self.rect.centery
norm = (x**2 + y**2)**0.5
const = 1/60
self.bat_x += const * x / norm
self.bat_y += const * y / norm
...