Pygame - 在正确的方向上制作 Sprite "walk"

Pygame - Making a Sprite "walk" in the right direction

我正在使用 pygame 继续我的工作。我目前正在研究敌人 class。基本上,它会从一侧走到另一侧。我可以让它在设定的边界之间行走,但我无法让图像显示敌人面对的正确方向。如果有人可以帮助我或给我一些建议,我将不胜感激。谢谢。

我认为我的问题是 update() 函数。

这是我的敌人Class

class Enemies(pygame.sprite.Sprite):
     enemy_moving_frames_r = []
     enemy_moving_frames_l = []

     change_x = 0
     change_y = 0

     boundary_top = 0
     boundary_bottom = 0
     boundary_left = 0
     boundary_right = 0

     level = None
     player = None
def __init__(self):
    pygame.sprite.Sprite.__init__(self)
    sprite_sheet = SpriteSheet("stuff/skeleton_7.png")

    image = sprite_sheet.get_image(7, 7, 28, 64)
    self.enemy_moving_frames_r.append(image)
    image = sprite_sheet.get_image(37, 7, 33, 64)
    self.enemy_moving_frames_r.append(image)
    image = sprite_sheet.get_image(70, 7, 33, 64)
    self.enemy_moving_frames_r.append(image)
    image = sprite_sheet.get_image(107, 7, 33, 64)
    self.enemy_moving_frames_r.append(image)
    image = sprite_sheet.get_image(142, 7, 33, 64)
    self.enemy_moving_frames_r.append(image)


    image = sprite_sheet.get_image(7, 7, 28, 64)
    image = pygame.transform.flip(image, True, False)
    self.enemy_moving_frames_l.append(image)
    image = sprite_sheet.get_image(37, 7, 33, 64)
    image = pygame.transform.flip(image, True, False)
    self.enemy_moving_frames_l.append(image)
    image = sprite_sheet.get_image(70, 7, 33, 64)
    image = pygame.transform.flip(image, True, False)
    self.enemy_moving_frames_l.append(image)
    image = sprite_sheet.get_image(107, 7, 33, 64)
    image = pygame.transform.flip(image, True, False)
    self.enemy_moving_frames_l.append(image)
    image = sprite_sheet.get_image(142, 7, 33, 64)
    image = pygame.transform.flip(image, True, False)
    self.enemy_moving_frames_l.append(image)


    self.image = self.enemy_moving_frames_r[0]
    self.rect = self.image.get_rect()



def update(self):
    # Move left/right
    self.rect.x += self.change_x

    cur_pos = self.rect.x - self.level.world_shift

    print(cur_pos)

    if cur_pos < self.boundary_left:
        self.change_x *= -1
        frame = (self.rect.x // 30) % len(self.enemy_moving_frames_r)
        self.image = self.enemy_moving_frames_r[frame]
    elif cur_pos > self.boundary_right:
        self.change_x *= -1
        frame = (self.rect.x // 30) % len(self.enemy_moving_frames_l)
        self.image = self.enemy_moving_frames_l[frame]  

看起来你只是在敌人改变方向时(即当它撞到边界之一时)才更新帧。然而,即使精灵没有到达边界,帧也应该根据当前位置和方向更新每一帧:

def update(self):
    # Move left/right
    self.rect.x += self.change_x

    cur_pos = self.rect.x - self.level.world_shift

    print(cur_pos)

    # test against boundaries:
    if cur_pos < self.boundary_left or cur_pos > self.boundary_right:
        self.change_x *= -1

    # set animation frame:
    if self.change_x > 0:
        frame = (self.rect.x // 30) % len(self.enemy_moving_frames_r)
        self.image = self.enemy_moving_frames_r[frame]
    elif self.change_x < 0:
        frame = (self.rect.x // 30) % len(self.enemy_moving_frames_l)
        self.image = self.enemy_moving_frames_l[frame]