动画行走 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
如果您在开始时加载所有图像(并转换和设置密钥)并保留列表或字典以直接从内存中获取它,代码可能会更好地工作。
我试图让我的代码在每次按下箭头键移动图像时循环显示图像,使其看起来像动画行走。但是,精灵在四处移动时会保持初始图像。在这里,我提供了一个向上移动的示例。
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
如果您在开始时加载所有图像(并转换和设置密钥)并保留列表或字典以直接从内存中获取它,代码可能会更好地工作。