Аркадная игра на PyGame

Настраиваем перемещение игрока

Несмотря на то, что мы описали функцию update, наш корабль при нажатии на стрелочки все-равно не движется. Проблема в том, что мы это функцию нигде не вызываем!

Ниже мы опишем вызов этой функции при срабатывании системных событий нажатия на клавиши, и корабль должен начать перемещаться влево и вправо.

Попробуйте добавить возможность перемещения вверх и вних, а также ограничить возможность перемещения за границы.

import pygame
from pygame.transform import scale

class Spaceship(pygame.sprite.Sprite):
    def __init__(self, x, y):
        pygame.sprite.Sprite.__init__(self)

        self.rect = pygame.Rect(x, y, 50, 100)
        self.image = scale(pygame.image.load("ship.png"), (50, 100))
        self.xvel = 0

    def draw(self, screen):
        screen.blit(self.image, (self.rect.x, self.rect.y))

    def update(self, left, right):
        if left:
            self.xvel -= 3

        if right:
            self.xvel += 3
        if not (left or right):
            self.xvel = 0
        self.rect.x += self.xvel

pygame.init()
screen = pygame.display.set_mode((800, 600))
pygame.display.set_caption("Asteroids")

sky = scale(pygame.image.load("sky.jpg"), (800, 600))
# создаем корабль в точке 400 400
ship = Spaceship(400, 400)

# заведем переменные, чтобы помнить, какие клавиши нажаты
left = False
right = False

while True:
    for e in pygame.event.get():
        # если нажата клавиша - меняем переменную
        if e.type == pygame.KEYDOWN and e.key == pygame.K_LEFT:
            left = True
        if e.type == pygame.KEYDOWN and e.key == pygame.K_RIGHT:
            right = True

        # если отпущена клавиша - меняем переменную
        if e.type == pygame.KEYUP and e.key == pygame.K_LEFT:
            left = False
        if e.type == pygame.KEYUP and e.key == pygame.K_RIGHT:
            right = False

        if e.type == pygame.QUIT:
            raise SystemExit("QUIT")
    # рисуем небо
    screen.blit(sky, (0, 0))

    # перемещаем корабль
    ship.update(left, right)
    # просим корабль нарисоваться
    ship.draw(screen)

    pygame.display.update()

Назад Вперед