@websec007
2020-06-22T10:46:52.000000Z
字数 1328
阅读 891
2020.Python从入门到实践
子弹击中外星人时,我们要马上知道,以便碰撞发生后让外星人立即消失。为此,我们将在“更新子弹”的位置后立即检测碰撞。
+++++++++++++++++ gf.update_bullets() +++++++++++++++++
def update_bullets(aliens, bullets):
"""更新子弹的位置,并删除已消失的子弹"""
--snip--
# 检查是否有子弹击中了外星人
# 如果是这样,就删除相应的子弹和外星人
collisions = pygame.sprite.groupcollide(bullets, aliens, True, True)
+++++++++++++++++ gf.update_bullets() +++++++++++++++++
def update_bullets(ai_settings, screen, ship, aliens, bullets):
--snip--
# 检查是否有子弹击中了外星人
# 如果是,就删除相应的子弹和外星人
collisions = pygame.sprite.groupcollide(bullets, aliens, True, True)
❶ if len(aliens) == 0:
# 删除现有的子弹,并新建一群外星人
❷ bullets.empty()
create_fleet(ai_settings, screen, ship, aliens)
+++++++++++++++++ gf.update_bullets() +++++++++++++++++
def update_bullets(ai_settings, screen, ship, aliens, bullets):
--snip--
# 删除已消失的子弹
for bullet in bullets.copy():
if bullet.rect.bottom <= 0:
bullets.remove(bullet)
check_bullet_alien_collisions(ai_settings, screen, ship, aliens, bullets)
++++++++++++++ gf.check_bullet_alien_collisions() ++++++++++++++
def check_bullet_alien_collisions(ai_settings, screen, ship, aliens, bullets):
"""响应子弹和外星人的碰撞"""
# 删除发生碰撞的子弹和外星人
collisions = pygame.sprite.groupcollide(bullets, aliens, True, True)
if len(aliens) == 0:
# 删除现有的所有子弹,并创建一个新的外星人群
bullets.empty()
create_fleet(ai_settings, screen, ship, aliens)