Вращение игрока вокруг центральной точки в пигаме - PullRequest
0 голосов
/ 25 февраля 2020

Я делаю игру, в которой два игрока могут стрелять друг в друга. Их движение будет определяться вращением вокруг фиксированной точки, точка будет (600, 300), которая является центром нашего экрана. Игрок будет вращаться вокруг этой точки, пока он нажимает определенную кнопку (которая продолжает оказывать силу нашему игроку), иначе он упадет (из-за силы тяжести). Я думаю, что это помогло бы думать об этом как о мяче, привязанном к точке с помощью струны. Строка прикрепляется до тех пор, пока кнопка нажата, и отсоединяется, как только кнопка отпущена и мяч отлетает. Вот мой класс игрока

class Player:
    def __init__(self):
        self.pos = [500, 200]
        self.width = 30
        self.height = 30
        self.player = pygame.image.load("player.png").convert_alpha()
        self.player = pygame.transform.scale(self.player, (self.width, self.height))
        self.rect = self.player.get_rect()
        self.rotated_player = None
        self.anguler_vel = 0
        self.Fg = 0.05
        self.Fp = 0
        self.arm_length = 0

Fp - сила, перпендикулярная силе гравитации Fg. Fg - это сила, которая обрушивает его на нашего игрока. Fp определяется как math.sin(theta) * Fg. Я отслеживаю Fp, потому что я хочу, чтобы игрок продолжал двигаться в направлении вращения после того, как его не отсоединили от струны. arm_length - длина строки.

У меня есть класс Point, который является точкой, вокруг которой будет вращаться наш игрок. Вот класс точек.

class Point:
    def __init__(self,x, y):
        self.pos = [x, y]
        dx = self.pos[0] - player.pos[0]
        dy = self.pos[1] - player.pos[1]
        self.angle = math.atan2(dy, dx)

Теперь мне нужна помощь с самим фактическим вращением. Я знаю, что добавление определенного значения к углу каждого отдельного кадра сделало бы его go вокруг. Но как мне сделать это go вокруг определенной точки, которую я указываю, и как бы длина руки t ie в это ?. Я считаю, что все это очень сложно реализовать, потому что ось Y перевернута, и все позиционные значения необходимо уменьшить при использовании их в расчетах из-за скорости FPS. Любая помощь в том, как это сделать, также будет оценена. Спасибо

...