Pygame报错AttributeError: 'Game'对象无'run'属性求助
解决Pygame中'Game'对象无'run'属性的错误
你的核心问题是把Game类的所有方法都嵌套定义在了__init__方法内部,导致这些方法不属于类的成员,外部实例自然无法调用。除此之外还有几处语法和拼写错误,下面是问题点和修正后的代码:
问题列表
- 类方法缩进错误:new_game、update、check_event、draw、run这些方法应该和__init__同级,不能嵌套在__init__里面
- Pygame初始化错误:
pg.init少了括号,应该是pg.init(),否则不会真正初始化Pygame - 拼写错误:
pg.evernt.get()里的evernt是笔误,正确写法是pg.event.get() - run方法参数错误:参数名写成了
seld,应该是标准的self - draw方法缩进错误:它被嵌套在了check_event方法内部,需要调整到类级别
- QUIT事件判断错误:应该用
event.type == pg.QUIT,而非event == pg.QUIT
修正后的完整代码
import pygame as pg import sys from settings import * class Game: def __init__(self): pg.init() # 修正:添加括号完成初始化 self.screen = pg.display.set_mode(RES) self.clock = pg.time.Clock() def new_game(self): pass def update(self): pg.display.flip() self.clock.tick(FPS) pg.display.set_caption(f'{self.clock.get_fps() :.1f}') def check_event(self): for event in pg.event.get(): # 修正:拼写错误evernt改为event # 修正:正确判断QUIT事件类型 if event.type == pg.QUIT or (event.type == pg.KEYDOWN and event.key == pg.K_ESCAPE): pg.quit() sys.exit() def draw(self): self.screen.fill('black') def run(self): # 修正:参数名seld改为self while True: self.check_event() self.update() self.draw() if __name__ == '__main__': game = Game() game.run()
内容的提问来源于stack exchange,提问作者The Riddler
相关产品推荐
相关产品推荐

