объект переворачивается в неподходящее время после изменения атрибута изображения - PullRequest
0 голосов
/ 30 мая 2019

В моей игре я добавляю функцию паузы, которая позволяет вам менять оружие, если вам удалось это сделать.Существует также функция, называемая поворотом, которая поворачивает оружие вместе с игроком, проблема в том, что иногда, когда вы меняете оружие, пистолет в конце концов направляет пистолет на игрока, и, если вы меняете его, пистолет будет работать.Направьте на игрока снова

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

Я не был на 100% уверен, какие именно фрагменты кода мне были нужны, но я думаю, что это касалось некоторых из них.Просто чтобы быстро сказать всем, кто думает, что это весь мой код. ЭТО НЕ ВСЕ МОЙ КОД !

class Gun():
    def __init__(self, x, y, gun_pic_one, gun_pic_two, gun_pic_three, gun_pic_four, gun_pic_five, gun_pic_six):

        self.direction_lock = False

        self.current_indicator = 1

        self.bullet_amount = 0
        self.picture = gun_pic_one
        self.gun_tag = "pistol"

        self.gun_one = gun_pic_one
        self.spare_gun_one = gun_pic_one
        self.gun_one_tag = "pistol"
        self.gun_one_permission = False
        self.gun_one = pygame.transform.scale(self.gun_one, (30, 10))
        self.direction = "right"
        self.previous_direction = "right"

        self.gun_two = gun_pic_two
        self.gun_two_tag = "tatical shotgun"
        self.gun_two_permission = False

        self.gun_three = gun_pic_three
        self.gun_three_tag = "machine gun"
        self.gun_three_permission = False

        self.gun_four = gun_pic_four
        self.gun_four_tag = "AK47"
        self.gun_four_permission = False

        self.gun_five =  gun_pic_five
        self.gun_five_tag = "bazooka"
        self.gun_five_permission = False

        self.gun_six = gun_pic_six
        self.gun_six_tag = "scar"
        self.gun_six_permission = False

        self.picture = pygame.transform.scale(self.picture, (70, 40))
        if self.gun_one != None:
            self.gun_one = pygame.transform.scale(self.gun_one, (70, 40))
            self.spare_gun_one = pygame.transform.scale(self.spare_gun_one, (70, 40))

        if self.gun_two != None:
            self.gun_two = pygame.transform.scale(self.gun_two, (100, 100))

        if self.gun_three != None:
            self.gun_three = pygame.transform.scale(self.gun_three, (150, 150))

        if self.gun_four != None:
            self.gun_three = pygame.transform.scale(self.gun_four, (100, 50))


        self.xpos = x
        self.ypos = y
        self.speed_x = 0
        self.speed_y = 0
        self.rect = self.picture.get_rect()
        self.rect.x = self.xpos
        self.rect.y = self.ypos

    def change_costume(self, indicator):


        if indicator == 1 and self.current_indicator != indicator:
            if self.gun_one != None:
                if self.gun_one_permission == True:
                    print(True)
                    self.picture = self.spare_gun_one
                    self.gun_tag = self.gun_one_tag
                    self.rect = self.picture.get_rect()
                    self.rect.x = self.xpos
                    self.rect.y = self.ypos
                    self.current_indicator = indicator

                else:
                    print(False)




        elif indicator == 2 and self.current_indicator != indicator:
            if self.gun_two != None:
                if self.gun_two_permission == True:
                    self.picture = self.gun_two
                    self.gun_tag = self.gun_two_tag
                    self.rect = self.picture.get_rect()
                    self.rect.x = self.xpos
                    self.rect.y = self.ypos
                    self.current_indicator = indicator


            else:
                self.picture = self.gun_one
                self.gun_tag = self.gun_one_tag
                self.rect = self.picture.get_rect()
                self.rect.x = self.xpos
                self.rect.y = self.ypos

        elif indicator == 3 and self.current_indicator != indicator:
            if self.gun_three != None:
                if self.gun_three_permission == True:
                    self.picture = self.gun_three
                    self.gun_tag = self.gun_three_tag
                    self.rect = self.picture.get_rect()
                    self.rect.x = self.xpos
                    self.rect.y = self.ypos
                    self.current_indicator = indicator

            else:
                self.picture = self.gun_one
                self.gun_tag = self.gun_one_tag
                self.rect = self.picture.get_rect()
                self.rect.x = self.xpos
                self.rect.y = self.ypos

        elif indicator == 4 and self.current_indicator != indicator:
            if self.gun_four != None:
                if self.gun_four_permission == True:
                    self.picture = self.gun_four
                    self.gun_tag = self.gun_four_tag
                    self.rect = self.picture.get_rect()
                    self.rect.x = self.xpos
                    self.rect.y = self.ypos
                    self.current_indicator = indicator

            else:
                self.picture = self.gun_one
                self.gun_tag = self.gun_one_tag
                self.rect = self.picture.get_rect()
                self.rect.x = self.xpos
                self.rect.y = self.ypos

        elif indicator == 5 and self.current_indicator != indicator:
            if self.gun_five != None:
                if self.gun_five_permission == True:
                    self.picture = self.gun_five
                    self.gun_tag = self.gun_five_tag
                    self.rect = self.picture.get_rect()
                    self.rect.x = self.xpos
                    self.rect.y = self.ypos
                    self.current_indicator = indicator

            else:
                self.picture = self.gun_one
                self.gun_tag = self.gun_one_tag
                self.rect = self.picture.get_rect()
                self.rect.x = self.xpos
                self.rect.y = self.ypos

        elif indicator == 6 and self.current_indicator != indicator:
            if self.gun_six != None:
                if self.gun_six_permission == True:
                    self.picture = self.gun_six
                    self.gun_tag = self.gun_six_tag
                    self.rect = self.picture.get_rect()
                    self.rect.x = self.xpos
                    self.rect.y = self.ypos
                    self.current_indicator = indicator

            else:
                self.picture = self.gun_one
                self.gun_tag = self.gun_one_tag
                self.rect = self.picture.get_rect()
                self.rect.x = self.xpos
                self.rect.y = self.ypos



        """if self.flipper_detector == True:
            self.flipper_detector = False

        elif self.flipper_detector == False:
            self.flipper_detector = True"""



        """else:
            self.picture = self.gun_one
            self.gun_tag = self.gun_one_tag
            self.rect = self.picture.get_rect()
            self.rect.x = self.xpos
            self.rect.y = self.ypos"""


    def turn_around(self, direction):
            if self.speed_x < 0:
                self.direction = direction

            elif self.speed_x > 0:
                self.direction = direction

            if self.direction != self.previous_direction:#meaning you can only flip to the opposite side when you direction is not equal to you last direction
                self.picture = pygame.transform.flip(self.picture, True, False)
                self.previous_direction = self.direction


while True:
    if status_bar.show == False:
         print(gun.direction)
    else:
        if cursor.clicked == True:
            for icon in gun_icons:
                if cursor.is_collided_with(icon):
                    if icon.tag == gun.gun_one_tag:
                        if gun.gun_one_permission == True:
                            gun.change_costume(1)

                    elif icon.tag == gun.gun_two_tag:
                        if gun.gun_two_permission == True:
                            gun.change_costume(2)

                    elif icon.tag == gun.gun_three_tag:
                        if gun.gun_three_permission == True:
                            gun.change_costume(3)

                    elif icon.tag == gun.gun_four_tag:
                        if gun.gun_four_permission == True:
                            gun.change_costume(4)

                    elif icon.tag == gun.gun_five_tag:
                        if gun.gun_five_permission == True:
                            gun.change_costume(5)

                    elif icon.tag == gun.gun_five_tag:
                        if gun.gun_six_permission == True:
                            gun.change_costume(6)

В результате, если игрок выбрал новое оружие, он перевернется не так, как прежде, и перевернетправильный путь, когда это было неправильно раньше.Что я хочу попробовать, так это то, что как только вы получите новое оружие, оно автоматически изменится в правильном направлении.У меня есть небольшое представление о том, что я мог бы сделать, чтобы исправить эту идею, но я не уверен на 100%, что это сработает.Я думал о добавлении логического значения, и если бы оно было Истиной, оно бы быстро перевернуло оружие, прежде чем вернуться в основной цикл.

isuue

На приведенной выше диаграмме пистолет направлен вправо с нашей точки зрения, но игра думает, что он направлен влево.

meh Затем я выхожу на экран строки состояния / паузы и иду и выбираютот же пистолет.

next part

Когда я иду и выбираю тот же пистолет после выбора, он внезапно решает вернуться в правильное положение.

...