首页 > 解决方案 > 您如何解决:“TypeError:参数 1 必须是 pygame.Surface,而不是 SpriteSheet”?

问题描述

我正在制作一个平台游戏。我有一个关卡类作为蓝图,我将它传递到关卡 1 和 2。但是,我不断收到错误消息:“TypeError:参数 1 必须是 pygame.Surface,而不是 SpriteSheet”(底部完全错误)有人知道怎么修这个东西吗?注意:错误位于底部。

class Level(object):

        def __init__(self, player):
    """ Constructor. Pass in a handle to player. Needed for when moving platforms
        collide with the player. """

    # Lists of sprites used in all levels. Add or remove
    # lists as needed for your game.
    self.platform_list = None
    self.enemy_list = None

    # Background image
    self.background = None

    # How far this world has been scrolled left/right
    self.world_shift = 0
    self.level_limit = -1000
    self.platform_list = pygame.sprite.Group()
    self.enemy_list = pygame.sprite.Group()
    self.player = player

    # Update everything on this level
    def update(self):
        """ Update everything in this level."""
        self.platform_list.update()
        self.enemy_list.update()

    def draw(self, screen):
        """ Draw everything on this level. """

        # Draw the background
        # We don't shift the background as much as the 
    sprites are shifted
        # to give a feeling of depth.
        screen.blit(self.background, (self.world_shift 
        // 3, 0))

        # Draw all the sprite lists that we have
        self.platform_list.draw(screen)
        self.enemy_list.draw(screen)


# Create platforms for the level
class Level01(Level):
    """ Definition for level 1. """

    def __init__(self, player):
        """ Create level 1. """

        # Call the parent constructor
        Level.__init__(self, player)

        self.background = 
        SpriteSheet('background_01.png')

        self.background.sprite_sheet.set_colorkey(constants.WHITE)
        self.level_limit = -2500


# Create platforms for the level
class Level02(Level):
    """ Definition for level 2. """

    def __init__(self, player):
        """ Create level 1. """

        # Call the parent constructor
        Level.__init__(self, player)

        self.background = SpriteSheet('background_02.png')

        self.background.sprite_sheet.set_colorkey(constants.WHITE)
        self.level_limit = -1000


Traceback (most recent call last):
  File 
"/Users/qingduliu/PycharmProjects/Platformer/platform_scroller.py", 
line 107, in <module>
    main()
  File 
"/Users/qingduliu/PycharmProjects/Platformer/platform_scroller.py", 
line 90, in main
    current_level.draw(screen)
  File "/Users/qingduliu/PycharmProjects/Platformer/levels.py", 
line 43, in draw
    screen.blit(self.background, (self.world_shift // 3, 0))
TypeError: argument 1 must be pygame.Surface, not SpriteSheet

标签: pygamepython-3.7

解决方案


您只能将曲面blit 到其他曲面;background不是表面。您的代码意味着您可以使用 访问其关联的表面self.background.sprite_sheet,因此请尝试更改此行:

screen.blit(self.background, (self.world_shift // 3, 0))

对此:

screen.blit(self.background.sprite_sheet, (self.world_shift // 3, 0))

推荐阅读