Pygame外星人入侵项目报错:AttributeError: 'AlienInvasion'对象无'image'属性
报错原因
本次触发的属性报错和文件路径无关,是调用逻辑错误:
pygame.image.load()是pygame模块自带的方法,你错误的通过AlienInvasion类的实例ai_game调用image.load,但该类没有定义image属性,直接触发了属性不存在的报错。- 代码还存在两处会导致后续报错的问题:
- 路径写法错误:Windows系统中字符串内的反斜杠
\属于转义字符,直接写'images\spaceship'会被识别为无效的转义序列,且你没有补全图片后缀(如.png/.jpg),路径指向无效。 - main.py的绘制顺序错误:
pygame.display.flip()是屏幕刷新方法,需要放在所有绘制操作之后,你当前把它写在填充背景、绘制飞船之前,会导致画面无内容,且你重复写了两次屏幕填充逻辑。
- 路径写法错误:Windows系统中字符串内的反斜杠
修复方案
修改ship.py
首先在文件顶部导入pygame模块,再修改图片加载的代码:
import pygame class Ship: def __init__(self, ai_game): self.screen = ai_game.screen self.screen_rect = ai_game.screen.get_rect() # 调用pygame自带的图片加载方法,路径用正斜杠、补全对应图片后缀 self.image = pygame.image.load('images/spaceship.png') # 后缀和你实际存放的图片文件名保持一致 self.rect = self.image.get_rect() self.rect.midbottom = self.screen_rect.midbottom def blitme(self): self.screen.blit(self.image, self.rect)
修改main.py的run_game方法
调整绘制顺序,删除冗余逻辑:
def run_game(self): while True: for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() self.screen.fill(self.setting.bg_color) self.ship.blitme() # 屏幕刷新放在所有绘制操作的最后 pygame.display.flip()
内容的提问来源于stack exchange,提问作者The noob coder
相关产品推荐
相关产品推荐

