Управление кораблем
243
вет на действия пользователя и будет использоваться при перерисовке корабля
на экране.
Если запустить
alien_invasion .py
и удерживать клавишу
→
, корабль непрерывно
двигается вправо, пока клавиша не будет отпущена.
Перемещение
влево и вправо
Теперь, когда мы реализовали непрерывное движение вправо, добавить движе-
ние влево относительно несложно. Для этого нужно снова изменить класс
Ship
и функцию
check_events()
. Ниже приведены необходимые изменения в
__init__()
и
update()
в классе
Ship
:
ship.py
def __init__(self, screen):
...
#
Флаги перемещения
self.moving_right = False
self.moving_left = False
def update(self):
"""Обновляет позицию корабля с учетом флагов."""
if self.moving_right:
self.rect.centerx += 1
if self.moving_left:
self.rect.centerx -= 1
В методе
__init__()
добавляется флаг
self.moving_left
. В
update()
используются
два отдельных блока
if
вместо
elif
, чтобы при нажатии обеих клавиш со стрелками
атрибут
rect.centerx
сначала увеличивался, а потом уменьшался. В результате
корабль остается на месте. Если бы для движения влево использовался блок
elif
,
то клавиша
→
всегда имела бы приоритет. Такая реализация повышает точность
перемещения при переключении направления, когда игрок может ненадолго удер-
живать нажатыми обе клавиши.
В
check_events()
необходимо внести два изменения:
game_functions.py
def check_events(ship):
"""Обрабатывает нажатия клавиш и события мыши."""
for event in pygame.event.get():
...
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_RIGHT:
ship.moving_right = True
elif event.key == pygame.K_LEFT:
ship.moving_left = True
elif event.type == pygame.KEYUP:
if event.key == pygame.K_RIGHT:
ship.moving_right = False
elif event.key == pygame.K_LEFT:
ship.moving_left = Fals
e