Обработка нажатия клавиши
Каждый раз, когда пользователь нажимает клавишу, это нажатие регистрируется в Pygame как событие. Каждое событие идентифицируется методом pygame.event.get(), поэтому в функции check_events() необходимо указать, какие события должны отслеживаться. Каждое нажатие клавиши регистрируется как событие KEYDOWN.
При обнаружении события KEYDOWN необходимо проверить, была ли нажата клавиша, инициирующая некоторое игровое событие. Например, при нажатии клавиши значение rect.centerx корабля увеличивается для перемещения корабля вправо:
game_functions.py
def check_events(ship):
"""Обрабатывает нажатия клавиш и события мыши."""
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
(1) . . . .elif event.type == pygame.KEYDOWN:
(2) . . . . . .if event.key == pygame.K_RIGHT:
. . . . . . . .# Переместить корабль вправо.
(3) . . . . . . . .ship.rect.centerx += 1
Функции check_events() передается параметр ship, потому что корабль должен двигаться вправо при нажатии клавиши . Внутри check_events() в цикл событий добавляется блок elif для выполнения кода при обнаружении события KEYDOWN (1) . Чтобы проверить, является ли нажатая клавиша клавишей
(pygame.K_RIGHT), мы читаем атрибут event.key (2). Если нажата клавиша
, корабль перемещается вправо, для чего значение ship.rect.centerx увеличивается на 1 (3).
Вызов check_events() в alien_invasion.py необходимо изменить, чтобы в аргументе передавался объект ship:
alien_invasion.py
# Запуск основного цикла игры.
while True:
. . . .gf.check_events(ship)
gf.update_screen(ai_settings, screen, ship)
Если запустить программу alien_invasion.py сейчас, вы увидите, что корабль перемещается вправо на 1 пиксел при каждом нажатии клавиши . Неплохо для начала, но это не лучший способ управления кораблем. Чтобы управление было более удобным, следует реализовать возможность непрерывного перемещения.