TypeError:参数 1 必须是 pygame.surface.Surface,而不是 str

问题描述 投票:0回答:1

当我尝试在 pygame 中运行我的代码时,我不断收到此错误消息,它允许我打开窗口,但当我尝试输入方向键时,它会给我此错误代码。

in redraw_game_window
    win.blit(walk_right[walkcount//3], (x, y))
TypeError: argument 1 must be pygame.surface.Surface, not str

它给出了代码错误

win.blit(walk_right[walkcount//3], (x, y))
这是在 elif right 语句下,但我想在 if left 语句下也会有同样的问题,因为它们是相同的

def redraw_game_window():
    global walkcount
    #win.blit(bg, (0, 0))
    win.fill(GREY)

    if walkcount + 1 >= 60:
        walkcount = 0

    if left:
        win.blit(walk_left[walkcount//3], (x, y))
        walkcount += 1
    elif right:
        win.blit(walk_right[walkcount//3], (x, y))
        walkcount += 1
    else:
        win.blit(idle_down, (x, y))

    pygame.display.update

在另一个项目中,我有几乎相同的代码,并且运行得很好,我比较了这两个项目以查看任何差异,但我找不到解决方案,我对 pygame 和编码比较陌生,所以我感谢任何帮助可以得到。

向左走的定义是向左走的精灵动画,都是一行。

walk_left = [pygame.image.load('art/Knight/move/KnightL1.png'), ('art/Knight/move/KnightL2.png'), ('art/Knight/move/KnightL3.png'), ('art/Knight/move/KnightL4.png')]
python compiler-errors pygame
1个回答
0
投票

错误在这里:

walk_left = [pygame.image.load('art/Knight/move/KnightL1.png'), ('art/Knight/move/KnightL2.png'), ('art/Knight/move/KnightL3.png'), ('art/Knight/move/KnightL4.png')]

只有第一个项目是对 pygame.image.load 的调用,列表中的其他项目只是字符串。如果 pygame.image.load('art/Knight/move/KnightL1.png') 是加载图像的方式,则必须对列表中的每个项目执行此操作,如下所示:

walk_left = [pygame.image.load('art/Knight/move/KnightL1.png'), pygame.image.load('art/Knight/move/KnightL2.png'), pygame.image.load('art/Knight/move/KnightL3.png'), pygame.image.load('art/Knight/move/KnightL4.png')]
© www.soinside.com 2019 - 2024. All rights reserved.