Перемещение вправо
Чтобы корабли пришельцев перемещались по экрану, мы воспользуемся методом update() из alien.py, который будет вызываться для каждого пришельца в группе. Сначала добавим настройку для управления скоростью каждого пришельца:
settings.py
def __init__(self):
...
. .# Настройки пришельцев
. .self.alien_speed_factor = 1
Настройка используется в реализации update():
alien.py
def update(self):
. ."""Перемещает пришельца вправо."""
(1) . . . .self.x += self.ai_settings.alien_speed_factor
(2) . . . .self.rect.x = self.x
При каждом обновлении позиции пришельца мы смещаем его вправо на величину, хранящуюся в alien_speed_factor. Точная позиция пришельца хранится в атрибуте self.x, который может принимать вещественные значения (1) . Затем значение self.x используется для обновления позиции прямоугольника пришельца (2).
В основном цикле while уже содержатся вызовы обновления корабля и пуль. Теперь необходимо также обновить позицию каждого пришельца:
alien_invasion.py
# Запуск основного цикла игры.
while True:
gf.check_events(ai_settings, screen, ship, bullets)
ship.update()
gf.update_bullets(bullets)
. .gf.update_aliens(aliens)
gf.update_screen(ai_settings, screen, ship, aliens, bullets)
Позиции пришельцев обновляются после обновления пуль, потому что скоро мы будем проверять, попали ли какие-либо пули в пришельцев.
Наконец, добавьте новую функцию update_aliens() в конец файла game_functions.py:
game_functions.py
def update_aliens(aliens):
. ."""Обновляет позиции всех пришельцев во флоте."""
. .aliens.update()
Мы используем метод update() для группы aliens, что приводит к автоматическому вызову метода update() каждого пришельца. Если запустить Alien Invasion сейчас, вы увидите, как флот двигается вправо и исчезает за краем экрана.