alien_invasion.py def _update_aliens(self):
...
self.aliens.update()
# Проверка коллизий "пришелец — корабль".
❶
if pygame.sprite.spritecollideany(self.ship, self.aliens):
❷
print("Ship hit!!!")
Функция
spritecollideany()
получает два аргумента: спрайт и группу. Функция
пытается найти любой элемент группы, вступивший в коллизию со спрайтом,
и останавливает цикл по группе сразу же после обнаружения столкнувшегося
элемента. В данном случае он перебирает группу
aliens
и возвращает первого
пришельца, столкнувшегося с кораблем
ship
.
Если ни одна коллизия не обнаружена,
spritecollideany()
возвращает
None
,
и блок
if
в точке
не выполняется. Если же будет обнаружен пришелец, столк-
нувшийся с кораблем, метод возвращает этого пришельца и выполняется блок
if
:
выводится сообщение
Ship
hit!!!
. При столкновении пришельца с кораблем
необходимо выполнить ряд операций: удалить всех оставшихся пришельцев и сна-
ряды, вернуть корабль в центр и создать новый флот. Прежде чем писать код всех
этих операций, необходимо убедиться в том, что решение с обнаружением коллизий
с кораблем работает правильно. Вызов
print()
всего лишь позволяет легко про-
верить правильность обнаружения коллизий.
Если вы запустите Alien Invasion, при столкновении пришельца с кораблем в тер-
минальном окне появляется сообщение
Ship
hit!!!
. В ходе тестирования этого
аспекта присвойте
alien_drop_speed
более высокое значение (например, 50 или
100), чтобы пришельцы быстрее добирались до вашего корабля.
Обработка столкновений с кораблем
Теперь нужно разобраться, что же происходит при столкновении пришельца с кора-
блем. Вместо того чтобы уничтожать экземпляр
ship
и создавать новый, мы будем
подсчитывать количество уничтоженных кораблей; для этого следует организовать
сбор статистики по игре. (Статистика также пригодится для подсчета очков.)