代码之家  ›  专栏  ›  技术社区  ›  Freyja Marika Rabbid76

如何使我的精灵在pygame中更改后返回到其原始帧

  •  0
  • Freyja Marika Rabbid76  · 技术社区  · 1 年前

    当谈到python时,我是一个初学者,我正在制作一个pygame游戏,我想让玩家的精灵在上下移动时更改为不同的图像帧,然后返回到原始图像。这是我目前的代码:

    # Define the Player object by extending pygame.sprite.Sprite
    class Player(pygame.sprite.Sprite):
        def __init__(self):
            super(Player, self).__init__()
            self.surf = pygame.image.load("Sprites/Characters/tile_0002.png").convert() # load image for sprite
            self.surf.set_colorkey((0, 0, 0), RLEACCEL) # set the colour to the image's values
            self.surf = pygame.transform.scale(self.surf, [25, 25]) # scale sprite image down
            self.rect = self.surf.get_rect(center=(-SCREEN_WIDTH + 50, SCREEN_HEIGHT,)) # where the sprite starts on the screen
    
        # when the sprite is going up or down
        def vertical(self):
            self.surf = pygame.image.load("Sprites/Characters/tile_0003.png").convert()
            self.surf.set_colorkey((0, 0, 0), RLEACCEL)
            self.surf = pygame.transform.scale(self.surf, [25, 25])
    
        # Move the sprite based on user keypresses
        def update(self, pressed_keys):
            if pressed_keys[K_UP]:
                self.rect.move_ip(0, -5)
                self.vertical() # change the image frame
            if pressed_keys[K_DOWN]:
                self.rect.move_ip(0, 5)
                self.vertical() # change the image frame
            if pressed_keys[K_LEFT]:
                self.rect.move_ip(-5, 0)
            if pressed_keys[K_RIGHT]:
                self.rect.move_ip(5, 0)
    
            # Keep player on the screen
            if self.rect.left < 0:
                self.rect.left = 0
            if self.rect.right > SCREEN_WIDTH:
                self.rect.right = SCREEN_WIDTH
            if self.rect.top <= 0:
                self.rect.top = 0
            if self.rect.bottom >= 500:
                self.rect.bottom = 500
    

    正如你所看到的,我认为制作一个更改框架的函数会在向上移动时更改它,但一旦你停止移动或向左或向右移动,就会将其切换回原来的样子: normal frame up and down frame

    制作另一个函数使其成为原始框架可能可行,但有更简单的方法吗?

    1 回复  |  直到 1 年前
        1
  •  1
  •   Freyja Marika Rabbid76    1 年前

    创建函数,根据参数设置精灵依赖关系,并根据按下的键更改图像,例如:

    class Player(pygame.sprite.Sprite):
        def __init__(self):
            super(Player, self).__init__()
            self.surf_horizontal = pygame.image.load("Sprites/Characters/tile_0002.png").convert()
            self.surf_horizontal.set_colorkey((0, 0, 0), RLEACCEL)
            self.surf_horizontal = pygame.transform.scale(self.surf_horizontal, [25, 25])
            self.surf_vertical = pygame.image.load("Sprites/Characters/tile_0003.png").convert()
            self.surf_vertical.set_colorkey((0, 0, 0), RLEACCEL)
            self.surf_vertical = pygame.transform.scale(self.surf_vertical, [25, 25])
            self.surf = self.surf_horizontal
            self.rect = self.surf.get_rect(center=(-SCREEN_WIDTH + 50, SCREEN_HEIGHT,))
    
        # when the sprite is going up or down
        def change_image(self, image_type):
            if image_type == "vertical":
                self.surf = self.surf_vertical
            else:
                self.surf = self.surf_horizontal
    
        # Move the sprite based on user keypresses
        def update(self, pressed_keys):
            image_type = "horizontal"
            if pressed_keys[K_UP]:
                self.rect.move_ip(0, -5)
                image_type = "vertical"
            if pressed_keys[K_DOWN]:
                self.rect.move_ip(0, 5)
                image_type = "vertical"
            if pressed_keys[K_LEFT]:
                self.rect.move_ip(-5, 0)
            if pressed_keys[K_RIGHT]:
                self.rect.move_ip(5, 0)
                
            self.change_image(image_type)