alien_invasion.py
def run_game():
"""Запуск основного цикла игры."""
while True:
self._check_events()
self.ship.update()
❶
self.bullets.update()
self._update_screen()
Стрельба
263
Вызов
update()
для группы
приводит к автоматическому вызову
update()
для каждого спрайта в группе. Строка
self.bullets.update()
вызывает
bullet.
update()
для каждого снаряда, включенного в группу
bullets
.
Обработка выстрелов
В классе
AlienInvasion
необходимо внести изменения в метод
_check_keydown_
events()
, чтобы при нажатии клавиши «пробел» происходил выстрел. Изменять
_check_keyup_events()
не нужно, потому что при отпускании клавиши ничего не
происходит. Также необходимо изменить
_update_screen()
и вывести каждый
снаряд на экран перед вызовом
flip()
.
При обработке выстрела придется выполнить довольно значительную работу, для
которой мы напишем новый метод
fire_bullet()
:
alien_invasion.py
...
from ship import Ship
❶
from bullet import Bullet
class AlienInvasion:
...
def _check_keydown_events(self, event):
...
elif event.key == pygame.K_q:
sys.exit()
❷
elif event.key == pygame.K_SPACE:
self._fire_bullet()
def _check_keyup_events(self, event):
...
def _fire_bullet(self):
"""Создание нового снаряда и включение его в группу bullets."""
❸
new_bullet = Bullet(self)
❹
self.bullets.add(new_bullet)
def _update_screen(self):
"""Обновляет изображения на экране и отображает новый экран."""
self.screen.fill(self.settings.bg_color)
self.ship.blitme()
❺
for bullet in self.bullets.sprites():
bullet.draw_bullet()
pygame.display.flip()
...
Сначала импортируется класс
Bullet
. Затем при нажатии клавиши «пробел» вы-
зывается
_fire_bullet()
. В коде
_fire_bullet()
мы создаем экземпляр
Bullet
,
которому присваивается имя
new_bullet
. Он включается в группу
bullets
вызовом метода
add()
. Метод
add()
похож на
append()
, но этот метод написан
специально для групп Pygame.
264
Достарыңызбен бөлісу: |