You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 16:18:01