在外星人入侵项目中,在 scoreboard.py 文件中的 def prep_ships(self): 方法中,进行如下代码,运行报错:
一.问题
def prep_ships(self):
"""显示余下还有多少飞船"""
self.ships = Group()
for ship_number in range(self.stats.ships_left):
ship = Ship(self.ai_setting, self.screen)
ship.rect.x = 10 + ship_number * ship.rect.width
ship.rect.y = 10
self.ships.add(ship)
对应报错的位置在***ship.py***文件的初始化中
class Ship(Sprite):
def __init__(self, screen, ai_settings):
super(Ship, self).__init__()
self.screen = screen
self.ai_settings = ai_settings
# 加载飞船图像,获取外接矩形
self.image = pygame.image.load('images/ship.bmp')
self.rect = self.image.get_rect() # 获取飞船矩形
self.screen_rect = screen.get_rect() # 获取屏幕矩形
"self.screen_rect = screen.get_rect() # 获取屏幕矩形" 这一句中。
二.解决
修改再三之后,发现原来是参数传递的问题在
***alien_invasion.py *** 文件中的创建飞船实例代码为:
# 船舰一艘肺循环
ship = Ship(screen, ai_setting)
故screen参数的传递应该在前面,而 scoreboard.py 文件中的 def prep_ships(self): 方法中 ship = Ship(self.ai_setting, self.screen) 参数传递反了。
应该为:
ship = Ship(self.screen, self.ai_setting)