М97 Изучаем Python: программирование игр, визуализация данных, веб-приложения



Pdf көрінісі
бет185/334
Дата18.10.2023
өлшемі6,19 Mb.
#186390
1   ...   181   182   183   184   185   186   187   188   ...   334
Байланысты:
Изучаем Python

ПРИМЕЧАНИЕ
Если вы используете macOS, может оказаться, что корабль двигается 
очень медленно даже при высоких значениях скорости . Проблема решается запуском 
игры в полноэкранном режиме, который мы вскоре реализуем .
Ограничение перемещений
Если удерживать какую-нибудь клавишу со стрелкой достаточно долго, корабль 
выйдет за край экрана. Давайте сделаем так, чтобы корабль останавливался при до-
стижении края экрана. Задача решается изменением метода 
update()
в классе 
Ship
:
ship.py
def update(self):
"""Обновляет позицию корабля с учетом флагов."""
# Обновляется атрибут x объекта ship, не rect.
❶ 
if self.moving_right and self.rect.right < self.screen_rect.right:
self.x += self.settings.ship_speed

if self.moving_left and self.rect.left > 0:
self.x -= self.settings.ship_speed
# Обновление атрибута rect на основании self.x
self.rect.x = self.x


Управление кораблем
257
Этот код проверяет позицию корабля перед изменением значения 
self.x
. Вы-
ражение 
self.rect.right
возвращает координату 
x
правого края прямоугольника 
корабля. Если это значение меньше значения, возвращаемого 
self.screen_rect.
right
, значит, корабль еще не достиг правого края экрана 

. То же относится и к ле-
вому краю: если координата 
x
левой стороны прямоугольника больше 0, значит, 
корабль еще не достиг левого края экрана 

. Проверка гарантирует, что корабль 
будет оставаться в пределах экрана перед изменением значения 
self.x
.
Если вы запустите 
alien_invasion .py
сейчас, то движение корабля будет останавли-
ваться у края экрана. Согласитесь, эффектно: мы всего лишь добавили условную 
проверку в команду 
if
, но все выглядит так, словно у края экрана корабль натал-
кивается на невидимую стену или силовое поле!
Рефакторинг _check_events()
В ходе разработки метод 
_check_events()
будет становиться все длиннее, поэтому 
мы выделим из 
_check_events()
еще два метода: для обработки событий 
KEYDOWN
и для обработки событий 
KEYUP
:


Достарыңызбен бөлісу:
1   ...   181   182   183   184   185   186   187   188   ...   334




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет