Pygame方向键触发动画时报错TypeError:参数需为Surface而非str
Pygame方向键触发动画报错解决方法
报错原因
你遇到的TypeError: argument 1 must be pygame.surface.Surface, not str错误,根源是精灵列表里混入了字符串路径,而非Pygame Surface对象。
看你定义的walk_left代码:
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()加载成了Surface,后面三个都是纯文件路径字符串。当walkcount//3取到1、2、3索引时,win.blit()拿到的是字符串,自然不符合参数要求。同理walk_right大概率也存在同样的问题。
修复步骤
- 修正精灵列表定义:给每个图片路径都加上
pygame.image.load()包裹,确保所有元素都是Surface对象:
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') ]
- 检查
walk_right:用同样的方式修正walk_right的定义,避免遗漏。 - 额外小问题修复:你的
redraw_game_window()函数最后一行pygame.display.update少了括号,改成pygame.display.update()才能正常刷新窗口。
内容的提问来源于stack exchange,提问作者Carter Luscombe
相关产品推荐
相关产品推荐

