Pygame Player加载失败报错:blit目标位置无效求助
解决Pygame中Player加载的TypeError问题
嘿,我一眼就揪出问题所在啦!你遇到的TypeError: invalid destination position for blit错误,根源是**screen.blit()的参数传递格式不对**。
错误原因
Pygame的blit()方法要求第二个参数是一个包含x、y坐标的元组(格式为(x, y)),但你现在把plr_x和plr_y拆成了两个独立参数传进去,这就违反了方法的参数规则,所以触发了错误。
第一步:修正blit的参数格式
把你player()函数里的这行代码:
screen.blit(plr, plr_x, plr_y)
改成:
screen.blit(plr, (plr_x, plr_y))
第二步:解决变量作用域的隐藏问题
另外还有个容易踩坑的细节:你的player()函数直接使用了screen变量,但这个变量是在函数定义之后才创建的,而且不在函数的作用域内,后续运行很可能会触发NameError。解决这个问题有两种简单方式:
- 方式一:把
screen作为参数传给player函数
然后在主循环里调用时改成:def player(screen): screen.blit(plr, (plr_x, plr_y))player(screen) - 方式二:在
player函数内声明screen为全局变量def player(): global screen screen.blit(plr, (plr_x, plr_y))
修正后的完整核心代码片段
import pygame # screen and icon scr_height = 600 scr_width = 800 icon_sprite = 'spaceship.png' # title: pygame.display.set_caption('Space Invaders') # icon: icon = pygame.image.load(icon_sprite) pygame.display.set_icon(icon) # player plr_sprite = 'player-ship.png' plr_x = 200 plr_y = 200 plr = pygame.image.load(plr_sprite) def player(screen): # blit means to draw screen.blit(plr, (plr_x, plr_y)) # to create a screen screen = pygame.display.set_mode((scr_width, scr_height)) run = True # the game loop: while run: # background colour screen.fill((240,248,255)) # to go through the events for event in pygame.event.get(): # to check if the exit button is pressed if event.type == pygame.QUIT: run = False # to put the player on screen: player(screen) pygame.display.update()
这样修改后,你的Player应该就能正常加载显示了,既然图片资源和尺寸都没问题,现在可以正常运行游戏啦。
内容的提问来源于stack exchange,提问作者David Jijo
相关产品推荐
相关产品推荐

