Группировка пуль

We use cookies. Read the Privacy and Cookie Policy

Класс Bullet и все необходимые настройки готовы; можно переходить к написанию кода, который будет выпускать пулю каждый раз, когда игрок нажимает клавишу «пробел». Сначала мы создадим в alien_invasion.py группу для хранения всех летящих пуль, чтобы программа могла управлять их полетом. Эта группа будет представлена экземпляром класса pygame.sprite.Group, который напоминает список с расширенной функциональностью, которая может быть полезна при построении игр. Мы воспользуемся группой для прорисовки пуль на экране при каждом проходе основного цикла и обновления текущей позиции каждой пули:

alien_invasion.py

import pygame

from pygame.sprite import Group

...

def run_game():

...

# Создание корабля.

ship = Ship(ai_settings, screen)

. .# Создание группы для хранения пуль.

(1) . .bullets = Group()

# Запуск основного цикла игры.

while True:

. . . .gf.check_events(ai_settings, screen, ship, bullets)

. . . .ship.update()

(2) . . . .bullets.update()

. . . .gf.update_screen(ai_settings, screen, ship, bullets)

run_game()

Класс Group импортируется из pygame.sprite. В точке (1) создается экземпляр Group с именем bullets. Эта группа создается за пределами цикла while, чтобы новая группа пуль не создавалась при каждом проходе цикла.

примечание

Если группа будет создаваться в цикле, в результате программа создает тысячи групп, и скорость игры упадет до минимума. Если ваша игра со временем начинает заметно «тормозить», внимательно проверьте, что происходит в основном цикле while.

Объект bullets передается методам check_events() и update_screen(). В check_events() он используется при обработке клавиши «пробел», а в update_screen() необходимо перерисовать выводимые на экран пули.

Вызов update() для группы (2) приводит к автоматическому вызову update() для каждого спрайта в группе. Строка bullets.update() вызывает bullet.update() для каждой пули, включенной в группу bullets.