运行Pygame项目提示Settings对象无screen属性报错该如何解决?
报错原因
- 核心错误为属性名拼写错误:你在调用
pygame.display.set_mode传参时,将Settings类中定义的screen_height属性错误写为screen.height,相当于尝试访问ai_settings下的screen对象的height属性,但Settings类根本没有定义screen属性,因此触发AttributeError。 - 次要逻辑问题:当前代码将屏幕填充、画面刷新的逻辑写在了事件遍历的
for循环内部,会导致每处理一个事件就重绘一次屏幕,性能冗余且可能出现画面刷新异常。
解决方案
修改main.py文件,修正拼写错误并调整刷新逻辑位置,修正后的完整代码如下:
import sys import pygame from settings import Settings def run_game(): pygame.init() ai_settings = Settings() # 此处将错误的ai_settings.screen.height改为正确的ai_settings.screen_height screen = pygame.display.set_mode( (ai_settings.screen_width, ai_settings.screen_height)) pygame.display.set_caption("Rocket Flying") while True: for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() # 屏幕填充、刷新逻辑移到事件遍历外部,每轮主循环只执行一次 screen.fill(ai_settings.bg_color) pygame.display.flip() run_game()
settings.py文件无需修改,运行修正后的代码即可正常启动游戏窗口。
内容的提问来源于stack exchange,提问作者Robert Lawson
相关产品推荐
相关产品推荐

