Pygame调用blit报invalid destination position for blit错误解决方案
Pygame blit方法TypeError报错排查
问题代码
class Coin(): def __init__(self, x, y): self.xcord = x self.ycord = y self.coinsprite = pygame.image.load("coin.png") def main(): coin = Coin(30, 40) screen.blit(coin.coinsprite, ([coin.xcord],[coin.ycord])) run = True while run: main() pygame.display.flip()
报错信息
Traceback (most recent call last): File "/Users/gabriel/PycharmProjects/2d dungeon game/main.py", line 104, in <module> main() File "/Users/gabriel/PycharmProjects/2d dungeon game/main.py", line 94, in main screen.blit(coin.coinsprite, ([coin.xcord],[coin.ycord])) TypeError: invalid destination position for blit
最初误解的修复方式
最开始误以为是变量名冲突导致报错,把Coin类的实例变量名从coin改成c1就解决了问题,修改后可正常运行的代码如下:
class Coin(): def __init__(self, x, y): self.xcord = x self.ycord = y self.coinsprite = pygame.image.load("coin.png") def main(): c1 = Coin(30, 40) screen.blit(c1.coinsprite, (c1.xcord,c1.ycord)) run = True while run: main() pygame.display.flip()
实际问题根源
pygame的blit方法要求传入的目标位置参数是包含两个数字的元组或列表,标准格式为(x坐标, y坐标)。原代码中给两个坐标值额外套了一层方括号,实际传入的参数是([x], [y]),两个元素都是列表类型,完全不符合参数要求,因此触发了类型错误。
修改代码时同步去掉了坐标外层多余的方括号,才是代码恢复正常的真正原因,和变量名修改没有任何关联。
内容的提问来源于stack exchange,提问作者Gabbisen
相关产品推荐
相关产品推荐

