Глава 12 • Инопланетное вторжение
❷
self.rect.y = self.y
def draw_bullet(self):
"""Вывод снаряда на экран."""
❸
pygame.draw.rect(self.screen, self.color, self.rect)
Метод
update()
управляет позицией снаряда. Когда происходит выстрел, снаряд
двигается вверх по экрану, что соответствует уменьшению координаты
y
; следова-
тельно, для обновления позиции снаряда следует вычесть величину, хранящуюся
в
settings.bullet_speed
, из
self.y
. Затем значение
self.y
используется для
изменения значения
self.rect.y
.
Атрибут
bullet_speed
позволяет увеличить скорость снарядов по ходу игры или
при изменении ее поведения. Координата
x
снаряда после выстрела не изменяется,
поэтому снаряд летит вертикально по прямой линии.
Для вывода снаряда на экран вызывается функция
draw_bullet()
. Функция
draw_
rect()
заполняет часть экрана, определяемую прямоугольником снаряда, цветом
из
self.color
.
Группировка снарядов
Класс
Bullet
и все необходимые настройки готовы; можно переходить к написанию
кода, который будет выпускать снаряд каждый раз, когда игрок нажимает клавишу
«пробел». Сначала мы создадим в
AlienInvasion
группу для хранения всех летя-
щих снарядов, чтобы программа могла управлять их полетом. Эта группа будет
представлена экземпляром класса
pygame.sprite.Group
— своего рода списком
с расширенной функциональностью, которая может быть полезна при построении
игр. Мы воспользуемся группой для прорисовки снарядов на экране при каждом
проходе основного цикла и обновления текущей позиции каждого снаряда.
Группа будет создаваться в
__init__()
:
alien_invasion.py def __init__(self):
...
self.ship = Ship(self)
self.bullets = pygame.sprite.Group()
Позиция снаряда будет обновляться при каждом проходе цикла
while
: