动画行走 Pygame 卡住了

Animated walking in Pygame stuck

我试图让我的代码在每次按下箭头键移动图像时循环显示图像,使其看起来像动画行走。但是,精灵在四处移动时会保持初始图像。在这里,我提供了一个向上移动的示例。

class Player(pygame.sprite.Sprite):
    def __init__(self):
        super(Player, self).__init__()
        self.surf = pygame.image.load("down1.png").convert()
        self.surf.set_colorkey((255, 255, 255), RLEACCEL)
        self.rect = self.surf.get_rect()
        
    def update(self, pressed_keys):
        up_counter = 0
        down_counter = 0
        right_counter = 0
        left_counter = 0
        if pressed_keys[K_UP]:
            player = pygame.image.load(up_images[up_counter]).convert()
            self.surf.set_colorkey((255, 255, 255), RLEACCEL)
            up_counter = (up_counter + 1) % len(up)
            self.rect.move_ip(0, -5)
            down_counter = 0
            left_counter = 0
            right_counter = 0

有谁知道我该如何解决这个问题?如果我遗漏任何可能有助于解决问题的信息,请告诉我。 谢谢!

我在 update 中看到两个错误(并且它们是相关联的)

第一个:

update 中,您总是在开始时设置 up_counter = 0,这会重置您的所有计算并且图像始终使用 up_images[0]。但是删除它无济于事。还有另一个错误(self.)。

第二个:

您应该只设置一次 up_counter = 0,但在 __init__ 中设置为 self.up_counter - 稍后使用此 self.up_counter。 而这个 self. 也会为下一次执行保留价值。


应该是这样的:

顺便说一句:它必须是 self.surf 而不是 player

class Player(pygame.sprite.Sprite):
    
    def __init__(self):
        super().__init__()
        
        self.surf = pygame.image.load("down1.png").convert()
        self.surf.set_colorkey((255, 255, 255), RLEACCEL)
        self.rect = self.surf.get_rect()
        
        self.up_counter = 0
        self.down_counter = 0
        self.right_counter = 0
        self.left_counter = 0
        
    def update(self, pressed_keys):
        if pressed_keys[K_UP]:
            self.surf = pygame.image.load(up_images[up_counter]).convert()
            self.surf.set_colorkey((255, 255, 255), RLEACCEL)
            up_counter = (up_counter + 1) % len(up)
            self.rect.move_ip(0, -5)
            self.down_counter = 0
            self.left_counter = 0
            self.right_counter = 0

如果您在开始时加载所有图像(并转换和设置密钥)并保留列表或字典以直接从内存中获取它,代码可能会更好地工作。