pygame - 您如何解决:“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
解决方案
您只能将曲面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))
推荐阅读
- android - 如何测试和部署资产超过 150 MB 的 Flutter 应用?
- python - 比较两个字典并返回新字典
- android - Android Studio 和 JavaFx
- java - 如何在 Mysql 中将日期值插入为 1999 年 11 月 20 日格式(“%d-%b-%Y”)
- javascript - 如何在 jquery 手风琴中突出显示悬停时的可放置区域 - 尝试重新排序手风琴部分
- php - 有没有办法重写一个url,转换查询字符串中括号之间的内容?
- deno - 生产中的进口 deno 第三方
- ios - Repost Swift:在 AR Face 网格上正确显示顶点标签
- javascript - 重写方法以将事件处理程序附加到每个调用
- boost - 使用 Boost.Beast WebSocket 时测量客户端备份