alien_invasion.py def _check_events(ship):
"""Обрабатывает нажатия клавиш и события мыши."""
for event in pygame.event.get():
...
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_RIGHT:
❶
self.ship.moving_right = True
❷
elif event.type == pygame.KEYUP:
if event.key == pygame.K_RIGHT:
self.ship.moving_right = False
В точке
изменяется реакция игры при нажатии клавиши
→
; вместо непосред-
ственного изменения позиции корабля программа просто присваивает
moving_right
значение
True
. В точке
добавляется новый блок
elif
, реагирующий на события
KEYUP
. Когда игрок отпускает клавишу
→
(
K_RIGHT
),
moving_right
присваивается
значение
False
.
Остается изменить цикл
while
в
alien_invasion .py
, чтобы при каждом проходе цикла
вызывался метод
update()
корабля:
alien_invasion.py def run_game(self):
# Запуск основного цикла игры.
while True:
self._check_events()
self.ship.update()
self._update_screen()
Позиция корабля будет обновляться после проверки событий клавиатуры, но
перед обновлением экрана. Таким образом, позиция корабля обновляется в от-
вет на действия пользователя и будет использоваться при перерисовке корабля
на экране.
Если запустить
alien_invasion .py
и удерживать клавишу
→
, корабль непрерывно
двигается вправо, пока клавиша не будет отпущена.
Перемещение влево и вправо
Теперь, когда мы реализовали непрерывное движение вправо, добавить движение
влево относительно несложно. Для этого нужно снова изменить класс
Ship
и метод