Почему использование камеры нарушает поиск угла с помощью math.atan2? [дубликат]Python

Программы на Python
Anonymous
Почему использование камеры нарушает поиск угла с помощью math.atan2? [дубликат]

Сообщение Anonymous »

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

Код: Выделить всё

def angle_to_mouse(self):
mouse_pos = vec(pygame.mouse.get_pos())
gun_pos = vec(self.rect.center)

dx = mouse_pos.x - gun_pos.x
dy = -(mouse_pos.y - gun_pos.y)
if dx != 0:
return math.degrees(math.atan2(dy, dx))

Код: Выделить всё

self.image = pygame.transform.rotate(self.base_image, self.angle_to_mouse())

Как только я добавил камеру, пистолет начал вести себя странно. Если мышь когда-нибудь окажется близко к пистолету, пистолет застрянет и будет поворачиваться в диапазоне от 0 до трех градусов.

Код: Выделить всё

class CameraGroup(pygame.sprite.Group):
def __init__(self, target=None, *sprites):
super().__init__(*sprites)
self.target = target
self.offsetx = 0
self.offsety = 0

def get_offset(self):
self.offsetx = WIDTH / 2 - self.target.rect.x
self.offsety = HEIGHT / 2 - self.target.rect.y
return vec(self.offsetx, self.offsety)

def camera_draw(self, screen):
self.get_offset()
for sprite in self.sprites():
offset_pos = (
round(sprite.rect.x + self.offsetx),
round(sprite.rect.y + self.offsety),
)
screen.blit(sprite.image, offset_pos)

def set_target(self, sprite):
self.target = sprite
Сначала я предположил, что это как-то связано с радианами, и убедился, что конвертировал угол в градусы. Затем я попытался вычесть смещение камеры от Gun_pos в методе angular_to_mouse. Я сделал это, чтобы попытаться получить «истинное» положение пистолета до того, как камера что-нибудь изменит. Однако проблема не исчезла.
Будем благодарны за любую помощь. Заранее спасибо.
Проект Github

Подробнее здесь: https://stackoverflow.com/questions/787 ... math-atan2

Вернуться в «Python»