250
Глава 12 • Стреляющий корабль
# Обновление позиции пули в вещественном формате.
self.y -= self.speed_factor
# Обновление позиции прямоугольника.
self.rect.y = self.y
def draw_bullet(self):
"""Вывод пули на экран."""
pygame.draw.rect(self.screen, self.color, self.rect)
Метод
update()
управляет позицией пули. Когда происходит выстрел, пуля двига-
ется вверх по экрану, что соответствует уменьшению координаты
y
; следовательно,
для обновления позиции пули следует вычесть величину, хранящуюся в
self.
speed_factor
, из
self.y
. Затем значение
self.y
используется для изменения
значения
self.rect.y
. Атрибут
speed_factor
позволяет увеличить скорость пуль
по ходу игры или при изменении ее поведения. Координата
x
пули после выстрела
не
изменяется, поэтому пуля летит вертикально по прямой линии.
Для вывода пули на экран вызывается функция
draw_bullet()
. Она заполняет часть
экрана, определяемую прямоугольником пули,
цветом из
self.color
.
Группировка пуль
Класс
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)
# Создание группы для хранения пуль.
bullets = Group()
# Запуск основного цикла игры.
while True:
gf.check_events(ai_settings, screen, ship, bullets)
ship.update()
bullets.update()
gf.update_screen(ai_settings, screen, ship, bullets)
run_game()
Стрельба
251
Класс
Group
импортируется из
pygame.sprite
. В точке
создается экземпляр
Group
с именем
bullets
. Эта группа создается за пределами цикла
while
, чтобы новая
группа пуль не создавалась при каждом проходе цикла.
Достарыңызбен бөлісу: