[关闭]
@websec007 2020-06-19T11:34:03.000000Z 字数 1974 阅读 933

Alien Invasion - 13.4 让外星人群移动

2020.Python从入门到实践


13.5 让外星人群移动 - Version 3.0

1. 3+1 过程回顾

回顾一个游戏对象创建的 “3+1 过程”,我们可以看到“外星人舰队实例已经创建完成”,现在需要完成的核心步骤是:(2)&(3),以及其配套的“基础类”中新的属性方法的定义创建;


2、外星人群移动实现

2.1 1个基础类

为了实现外星人舰队的移动控制实现,对原Alien类进行新的“属性”和“方法”的添加。

2.1.1 新属性添加(@settings.py)

++++++++++++++++++++++settings.py+++++++++++++++++++++++++

  1. # 添加外星人屬性
  2. # 舰队移动方向控制属性
  3. self.fleet_direction = 1
  4. # 舰队下移速度控制属性
  5. self.fleet_drop_speed = 10
  6. # 外星人移动影响因子
  7. self.alien_speed_factor = 1

2.1.2 新方法添加

++++++++++++++++++++++Alien.py+++++++++++++++++++++++++

  1. class Alien(Sprite):
  2. .
  3. .
  4. .
  5. def update(self):
  6. """外星人左右移动更新方法创建"""
  7. self.x += self.game_settings.alien_speed_factor*self.game_settings.fleet_direction
  8. self.rect.x = self.x
  9. def check_edges(self):
  10. if self.rect.right >= self.screen.get_rect().right:
  11. return True
  12. elif self.rect.left <= 0:
  13. return True

2.2 3个核心步骤

2.2.1 创建外星人舰队

前面已经全部完成了,这就不在重复贴内容了,具体内容请见13.4章节内容。


2.2.2 “更新”外星人舰队移动

++++++++++++++++++++gf.check_fleet_edges++++++++++++++++++++++

  1. def change_fleet_direction(aliens, game_settings):
  2. """改变舰队移动方向前,先下移整个舰队"""
  3. for alien in aliens.sprites():
  4. alien.rect.y += game_settings.fleet_drop_speed
  5. """舰队整体下移后,随即改变舰队移动方向"""
  6. game_settings.fleet_direction *= -1
  7. def check_fleet_edges(aliens, game_settings):
  8. """外星人舰队所有成员碰壁检查,只要有一个碰壁事件发生,即刻调整舰队移动方向"""
  9. for alien in aliens.sprites():
  10. if alien.check_edges():
  11. change_fleet_direction(aliens, game_settings)
  12. break

++++++++++++++++++++++gf.update_aliens++++++++++++++++++++++++

  1. def update_aliens(aliens, game_settings):
  2. """外星人碰壁检查,并更新外星人位置"""
  3. check_fleet_edges(aliens, game_settings)
  4. aliens.update()

2.2.3 “绘制”外星人舰队移动

+++++++++++++++++++++gf.update_screen()+++++++++++++++++++++++

  1. def update_screen(screen, bg_color, ship, bullets, aliens, game_settings):
  2. # Update Game
  3. screen.fill(bg_color)
  4. # 飞船移动更新
  5. ship.update()
  6. # 绘制飞船图像
  7. ship.blitme()
  8. # 子弹组移动更新
  9. update_bullets(bullets)
  10. # 绘制编组中的每一个子弹矩形图形
  11. draw_bullets(bullets)
  12. # 外星人移动更新 ?
  13. update_aliens(aliens, game_settings)
  14. # 绘制外星人
  15. aliens.draw(screen)
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注