Создаем игру с Pygame и Python. Часть 7
Продолжаем покорять космические просторы с Python и Pygame.В прошлой статье мы придали кораблю возможность управления с помощью клавиш. В сегодняшней статье мы добавим нашему космическому кораблю возможность ускоряться. И согласно механики игры Asteroids корабль будет двигаться только вперед.
В игре, нажатие клавиши UP-(вверх), будет увеличивать скорость космического корабля. Когда вы отпустите клавишу, космический корабль должен сохранить свою текущую скорость, но больше не должен ускоряться. И, чтобы замедлить его, вам придется повернуть космический корабль и снова нажать вверх.
Этот процесс может показаться немного сложным, поэтому, прежде чем продолжить, дадим краткое резюме:
направление(direction)-это вектор, описывающий, куда направлен космический корабль.
скорость(velocity)-это вектор, описывающий, куда движется космический корабль в каждом кадре.
УСКОРЕНИЕ(ACCELERATION)-это постоянное число, описывающее, насколько быстро космический корабль может ускориться каждый кадр.
Можно рассчитать изменение скорости, умножив вектор направления(direction) на значение УСКОРЕНИЯ(ACCELERATION) и добавив результат к текущей скорости. Это происходит только тогда, когда двигатель включен, то есть когда игрок нажимает вверх - UP. Новое положение космического корабля вычисляется путем добавления текущей скорости к текущему положению космического корабля. Это происходит каждый кадр, независимо от состояния двигателя.
Зная это, добавим значение ACCELERATION к классу космического корабля:
class Spaceship(GameObject):
MANEUVERABILITY = 3
ACCELERATION = 0.25
# добавим метод отвечающий за ускорение
def accelerate(self):
self.velocity += self.direction * self.ACCELERATION
# Теперь можно добавить обработку ввода в функцию _handle_input() в Space Rocks. Аналогично вращению, оно будет проверять текущее состояние клавиатуры, а не события нажатия клавиш.
def _handle_input(self):
for event in pygame.event.get():
if event.type == pygame.QUIT or (
event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE
):
quit()
............................
............................
............................
# проверка состояния клавиш
is_key_pressed = pygame.key.get_pressed()
if is_key_pressed[pygame.K_RIGHT]:
self.spaceship.rotate(clockwise=True)
elif is_key_pressed[pygame.K_LEFT]:
self.spaceship.rotate(clockwise=False)
if is_key_pressed[pygame.K_UP]:
self.spaceship.accelerate()
Запустим игру. Развернем корабль в нужном направлении и включим двигатель:
Теперь наш космический корабль может двигаться и вращаться! Однако, когда он достигает края экрана, то выходит за его пределы. Это то, что мы должны исправить!
-
- Михаил Русаков
Комментарии (0):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.