完全跟着书上敲的代码,提示:AttributeError: 'AlienInvasion' object has no attribute '_check_events'
import sys
import pygame
from settings import Settings
from ship import Ship
class AlienInvasion:
def __init__(self):
pygame.init() #我们已经知道python有一个特殊的“工具包(模块)”叫pygame了。在我们要动手用
#它完成我们的想法之前,电脑这个强迫症需要我们检查一遍,这个工具包是否完整,能否正常给我们
#提供帮助。而这个检查的动作,就是pygame.init()
self.settings=Settings()
self.screen=pygame.display.set_mode((self.settings.screen_width,self.settings.screen_height)) #创建一个显示窗口 宽1200,高800
pygame.display.set_caption("Alien Invasion") #设置窗口的标题为 Alien Invasion
self.ship=Ship(self)
def run_game(self):
while True:
self._check_events()
self._update_screen()
self.ship.updata()
def _check_events(self):
for event in pygame.event.get(): #事件循环
if event.type==pygame.QUIT: #用户点击关闭窗口按钮,将使用exit()方法退出游戏
sys.exit()
elif event.type==pygame.KEYDOWN:
if event.key==pygame.K_RIGHT:
self.ship.moving_right=True
elif event.key==pygame.K_LEFT:
self.ship.moving_left=True
elif event.type==pygame.KEYUP:
if event.key==pygame.K_RIGHT:
self.ship.moving_right=False
elif event.key==pygame.K_LEFT:
self.ship.moving_left=False
def _update_screen(self):
self.screen.fill(self.settings.bg_color) #每次循环时,都重绘屏幕 填充屏幕
self.ship.blitme() #调用blitme()方法
pygame.display.flip() #让最近的屏幕可见,刷新屏幕
if name=="main":
ai=AlienInvasion()
ai.run_game()
你把_check_events函数定义到while循环里面去了
这缩进,我也是服气
就是还不太理解,所有是懂非懂的看着书上敲得,不在主循环里也还是不行@
要把_check_events函数体拿出来,放在和 def run_game(self) 并列的等级
这篇文章:外星人入侵游戏--python实战 (附完整代码) 也许有你想要的答案,你可以看看