М97 Изучаем Python: программирование игр, визуализация данных, веб-приложения



Pdf көрінісі
бет183/334
Дата18.10.2023
өлшемі6,19 Mb.
#186390
1   ...   179   180   181   182   183   184   185   186   ...   334
Байланысты:
Изучаем Python


Глава 12 • Инопланетное вторжение
_check_events()
. Ниже приведены необходимые изменения в 
__init__()
и 
update()
в классе 
Ship
:
ship.py
def __init__(self, ai_game):
...
# Флаги перемещения
self.moving_right = False
self.moving_left = False
def update(self):
"""Обновляет позицию корабля с учетом флагов."""
if self.moving_right:
self.rect.x += 1
if self.moving_left:
self.rect.x -= 1
В методе 
__init__()
добавляется флаг 
self.moving_left
. В 
update()
используются 
два отдельных блока 
if
вместо 
elif
, чтобы при нажатии обеих клавиш со стрел-
ками атрибут 
rect.x
сначала увеличивался, а потом уменьшался. В результате 
корабль остается на месте. Если бы для движения влево использовался блок 
elif

то клавиша 

всегда имела бы приоритет. Такая реализация повышает точность 
перемещения при переключении направления, когда игрок может ненадолго удер-
живать нажатыми обе клавиши.
В 
_check_events()
необходимо внести два изменения:
alien_invasion.py
def _check_events(self):
"""Обрабатывает нажатия клавиш и события мыши."""
for event in pygame.event.get():
...
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_RIGHT:
self.ship.moving_right = True
elif event.key == pygame.K_LEFT:
self.ship.moving_left = True
elif event.type == pygame.KEYUP:
if event.key == pygame.K_RIGHT:
self.ship.moving_right = False
elif event.key == pygame.K_LEFT:
self.ship.moving_left = False
Если событие 
KEYDOWN
происходит для события 
K_LEFT
, то 
moving_left
присваи-
вается 
True
. Если событие 
KEYUP
происходит для события 
K_LEFT
, то 
moving_left
присваивается 
False
. Здесь возможно использовать блоки 
elif
, потому что каждое 
событие связано только с одной клавишей. Если же игрок нажимает обе клавиши 
одновременно, то программа обнаруживает два разных события.
Если вы запустите 
alien_invasion .py
, то увидите, что корабль может непрерывно 
двигаться влево и вправо. Если же нажать обе клавиши, корабль останавливается.


Управление кораблем
255
Следующий шаг — доработка движения корабля. Внесем изменения в скорость 
и ограничим величину перемещения, чтобы корабль не выходил за края экрана.
Регулировка скорости корабля
В настоящий момент корабль смещается на 1 пиксел за каждый проход цикла 
while
, но для повышения точности управления скоростью можно добавить в класс 
Settings
атрибут 
ship_speed
. Этот атрибут определяет величину смещения корабля 
при каждом проходе цикла. Новый атрибут 
settings .py
выглядит так:


Достарыңызбен бөлісу:
1   ...   179   180   181   182   183   184   185   186   ...   334




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет