Байланысты: Изучаем Python. Программирование игр, визуализация данных, веб-приложения ( PDFDrive )
ПРИМЕЧАНИЕ Если группа будет создаваться в цикле, в результате программа создает тысячи групп, и скорость
игры упадет до минимума . Если ваша игра со временем начинает заметно «тормозить», вниматель-
но проверьте, что происходит в основном цикле while .
Объект
bullets
передается методам
check_events()
и
update_screen()
. В
check_
events()
он используется при обработке клавиши «пробел», а в
update_screen()
необходимо перерисовать выводимые на экран пули.
Вызов
update()
для группы
приводит к автоматическому вызову
update()
для
каждого спрайта в группе. Строка
bullets.update()
вызывает
bullet.update()
для
каждой пули, включенной в группу
bullets
.
Обработка выстрелов
В файле
game_functions .py
необходимо внести изменения в метод
check_keydown_
events()
, чтобы при нажатии клавиши «пробел» происходил выстрел. Изменять
check_keyup_events()
не нужно, потому что при отпускании клавиши ничего
не происходит. Также необходимо изменить
update_screen()
и вывести каждую
пулю на экран перед вызовом
flip()
. Ниже представлены соответствующие
изменения в
game_functions .py
:
game_functions.py ...
from bullet import Bullet
def check_keydown_events(event, ai_settings, screen, ship, bullets):
...
elif event.key == pygame.K_SPACE:
# Создание новой пули и включение ее в группу bullets.
new_bullet = Bullet(ai_settings, screen, ship)
bullets.add(new_bullet)
...
def check_events(ai_settings, screen, ship, bullets):
"""Обрабатывает нажатия клавиш и события мыши."""
for event in pygame.event.get():
...
elif event.type == pygame.KEYDOWN:
check_keydown_events(event, ai_settings, screen, ship, bullets)
...
def update_screen(ai_settings, screen, ship, bullets):
...
# Все пули выводятся позади изображений корабля и пришельцев.
for bullet in bullets.sprites():
bullet.draw_bullet()
ship.blitme()
...