Изображение вращается в неправильном направлении - PullRequest
1 голос
/ 13 июня 2019

В моей игре я создаю турель (тип пулемета, который вы используете на земле).Проблема в том, что я использую джойстик для перемещения персонажа, когда джойстик направлен вниз, скорость у положительна (так что он может двигаться вниз), противоположное, если вы двигаетесь вверх.Затем if проверяет ваш текущий угол и видит, в каком направлении вы указываете, если произойдет одно из операторов if, тогда оно позволит вам двигаться.Главная проблема заключается в том, что когда я перемещаю джойстик вверх, стрелы указывают вниз.

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

joystick = pygame.joystick.Joystick(0)
    joystick.init()

turret_stand_pic = pygame.image.load("C:/knuckles_pictures/turret_stand.png").convert_alpha()
class Turret_stand():
    def __init__(self, x, y, picture, picture_tag):
        self.xpos = x
        self.ypos = y
        self.picture = picture
        super().__init__()
        self.picture = pygame.transform.scale(self.picture, (200, 200))
        self.rect = self.picture.get_rect()
        self.rect.x = self.xpos
        self.rect.y = self.ypos
        self.tag = picture_tag

    def draw(self):
        screen.blit(self.picture, (self.xpos, self.ypos))


turret_gun_pic = pygame.image.load("C:/knuckles_pictures/turret_gun.png").convert_alpha()
class Turret_gun():
    def __init__(self, x, y, picture, picture_tag):
        self.xpos = x
        self.ypos = y
        self.picture = picture
        super().__init__()
        self.picture = pygame.transform.scale(self.picture, (200, 80))
        self.rect = self.picture.get_rect()
        self.rect.x = self.xpos
        self.rect.y = self.ypos
        self.tag = picture_tag
        self.previous_angle = 0
        self.angle = -90
        self.speed_x = 0
        self.speed_y = 0
        self.facing = "left"


    def rotate(self, angle):
        if angle != self.angle:
            self.picture = pygame.transform.rotate(self.picture, angle)
            """self.angle += angle
            self.previous_angle = self.angle"""





    def draw(self):
        if self.angle == 0:
            screen.blit(self.picture, (self.xpos+70, self.ypos-70))

        elif self.angle == -90:
            screen.blit(self.picture, (self.xpos, self.ypos))

turret = Turret_gun(500, 370, turret_gun_pic, "turret")
turret_stand = Turret_stand(500, 400, turret_stand_pic, "turret stand")

while True:
    [...]

if joystick:
                move = 3
                axis_x_two, axis_y_two = (joystick.get_axis(3), joystick.get_axis(2))
                if abs(axis_x_two) > 0.1:
                    turret.speed_x = move * axis_x_two
                    turret.speed_y = move * axis_y_two

                turret.speed_y = round(int(turret.speed_y))
                turret.speed_x = round(int(turret.speed_x))


if turret.angle == -90 and turret.speed_y == -3 and turret.speed_x <= 1 and turret.speed_x >= -1:
            turret.rotate(90)

        if turret.angle == 0 and turret.speed_x == -3 and turret.speed_y <= 1 and turret.speed_y >= -1:
            turret.rotate(-90)

turret.update()
turret.draw()

. Фактические результаты состоят в том, что при нажатии джойстика вверх пулемет направлен вниз.Вот что я имею в виду:

enter image description here

В этом случае револьверная головка направлена ​​вниз: enter image description here

Что я должен ожидать, так это то, что когда я перемещаю джойстик вверх, турель указывает вверх.enter image description here

Иногда пистолет не показывает, когда джойстик направлен вправо:

1 Ответ

1 голос
/ 13 июня 2019

По сути, вам нужно изменить направление вращения изображения.Таким образом, чтобы перевернуть его, поверните его еще на 180 градусов.Измените строку в вашем методе rotate на

self.picture = pygame.transform.rotate(self.picture, angle+180)

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

self.picture = pygame.transform.rotate(self.picture, 180-angle)

Это не просто переворачивает его, направление вращения меняется на противоположное.Увеличение угла фактически уменьшает вращение.

Опять же, это может не сработать.Это может указывать правильно, если вы переместите палку вверх.Если это так, попробуйте изменить 180 на другое число, например 90 или 270. Это смещает поворот на 90 градусов в одном или другом направлении.

self.picture = pygame.transform.rotate(self.picture, 90-angle)

или

self.picture = pygame.transform.rotate(self.picture, 270-angle)

...