[关闭]
@websec007 2020-06-22T02:46:52.000000Z 字数 1328 阅读 767

Alien Invasion - 13.5 射杀外星人

2020.Python从入门到实践


1.碰撞检测函数

2.检测子弹与外星人的碰撞

子弹击中外星人时,我们要马上知道,以便碰撞发生后让外星人立即消失。为此,我们将在“更新子弹”的位置后立即检测碰撞。

+++++++++++++++++ gf.update_bullets() +++++++++++++++++

  1. def update_bullets(aliens, bullets):
  2. """更新子弹的位置,并删除已消失的子弹"""
  3. --snip--
  4. # 检查是否有子弹击中了外星人
  5. # 如果是这样,就删除相应的子弹和外星人
  6. collisions = pygame.sprite.groupcollide(bullets, aliens, True, True)

3.生成新的外星人群

+++++++++++++++++ gf.update_bullets() +++++++++++++++++

  1. def update_bullets(ai_settings, screen, ship, aliens, bullets):
  2. --snip--
  3. # 检查是否有子弹击中了外星人
  4. # 如果是,就删除相应的子弹和外星人
  5. collisions = pygame.sprite.groupcollide(bullets, aliens, True, True)
  6. if len(aliens) == 0:
  7. # 删除现有的子弹,并新建一群外星人
  8. bullets.empty()
  9. create_fleet(ai_settings, screen, ship, aliens)

4.重构update_bullets()

+++++++++++++++++ gf.update_bullets() +++++++++++++++++

  1. def update_bullets(ai_settings, screen, ship, aliens, bullets):
  2. --snip--
  3. # 删除已消失的子弹
  4. for bullet in bullets.copy():
  5. if bullet.rect.bottom <= 0:
  6. bullets.remove(bullet)
  7. check_bullet_alien_collisions(ai_settings, screen, ship, aliens, bullets)

++++++++++++++ gf.check_bullet_alien_collisions() ++++++++++++++

  1. def check_bullet_alien_collisions(ai_settings, screen, ship, aliens, bullets):
  2. """响应子弹和外星人的碰撞"""
  3. # 删除发生碰撞的子弹和外星人
  4. collisions = pygame.sprite.groupcollide(bullets, aliens, True, True)
  5. if len(aliens) == 0:
  6. # 删除现有的所有子弹,并创建一个新的外星人群
  7. bullets.empty()
  8. create_fleet(ai_settings, screen, ship, aliens)
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注