1.向右移动外星人 P243
def update_aliens(aliens):
"""更新外星人群中所有外星人的位置"""
aliens.update() #方法update()是在alien类中定义的
对编组aliens调用方法update(),这将自动对每个外星人调用方法update().
2.检测子弹与外星人碰撞 P246
方法sprite.groupcollide()将每颗子弹的rect同每个外星人的rect进行比较,并返回一个字典,其中包含发生了碰撞的子弹和外星人。在这个字典中,每个键都是一颗子弹,而相应的值都是被击中的外星人。
def check_bullet_alien_collisions(ai_settings, screen, ship, aliens, bullets):
"""Respond to bullet-alien collisions."""
# 删除相应的子弹和外星人
collisions = pygame.sprite.groupcollide(bullets, aliens, True, True)
两个True告诉pygame删除发生碰撞的子弹和外星人,要模拟能够穿行到屏幕顶端的高能子弹——消灭它击中的每个外星人,可将第一个布尔设为False,并让第二个布尔实参为True。
3.检测外星人与飞船碰撞 P250
if pygame.sprite.spritecollideany(ship, aliens):
ship_hit(ai_settings, stats, screen, ship, aliens, bullets)
方法spritecollideany()接受两个实参:一个精灵(ship)和一个编组(aliens)。它检查编组是否有成员与精灵发生了碰撞,并在找到与精灵发生了碰撞的成员后就停止遍历编组,返回找到的第一个与飞船发生碰撞的外星人。