Ограничение перемещений

We use cookies. Read the Privacy and Cookie Policy

Если удерживать какую-нибудь клавишу со стрелкой достаточно долго, корабль выйдет за край экрана. Давайте сделаем так, чтобы корабль останавливался при достижении края экрана. Задача решается изменением метода update() в классе Ship:

ship.py

def update(self):

"""Обновляет позицию корабля с учетом флагов."""

# Обновляется атрибут center, не rect.

(1) . . . .if self.moving_right and self.rect.right < self.screen_rect.right:

self.center += self.ai_settings.ship_speed_factor

(2) . . . .if self.moving_left and self.rect.left > 0:

self.center -= self.ai_settings.ship_speed_factor

. . . .

# Обновление атрибута rect на основании self.center

self.rect.centerx = self.center

Этот код проверяет позицию корабля перед изменением значения self.center. Выражение self.rect.right возвращает координату x правого края прямо­угольника корабля. Если это значение меньше значения, возвращаемого self.screen_rect.right, значит, корабль еще не достиг правого края экрана (1) . То же относится и к левому краю: если координата x левой стороны прямоугольника больше 0, значит, корабль еще не достиг левого края экрана (2). Проверка гарантирует, что корабль будет оставаться в пределах экрана, перед изменением значения self.center.

Если вы запустите alien_invasion.py сейчас, то движение корабля будет останавливаться у края экрана.