В этой статье мы разберём как происходит анимация в PyGame и также не много затроним работу с события ми в библиотеки.
Также перед прочтением этой стать, рекомендую прочитать предыдущие, чтобы лучше понимать здесь написанное:
Как сделать анимацию в PyGame:
Для начала, чтобы всё наиболее наглядно показать, сделаем несколько переменных, вот они:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | # Позиция объекта по X posX = 80 # Позиция объекта по Y posY = 80 # Скорость объекта speed = 3 # Ширина окна screenWidth = 500 # Высота окна screenHeight = 400 # Окно screen = pygame.display.set_mode((screenWidth, screenHeight)) # Таймер clock = pygame.time.Clock() |
Как вы видите, в начале мы сделали переменные для назначения позиции по осям X и Y, потом назначили скорость при которой будет у нас перемешаться объект.
Также назначили ширину и высоту окна, это для удобства, так как он нам ещё пригодиться, создали окно и назначили таймер, он нам пригодиться для назначения FPS.
Вот основной код программы:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | while True: # Назначим FPS clock.tick(60) # Закрашиваем весь экран в чёрный screen.fill(BLACK) # Проверка позиции if posX + 30 + 50 < screenWidth and posY - 30 - 50 <= 0: posX += speed elif posX + 30 + 50 >= screenWidth and posY + 30 + 50 < screenHeight: posY += speed elif posX - 30 - 50 >= 0 and posY + 30 + 50 >= screenHeight: posX -= speed elif posX - 30 - 50 <= 0 and posY - 30 - 50 > 0: posY -= speed # Создание шара pygame.draw.circle(screen, GREEN, (posX, posY), 60) # Проверка событий for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() # Обновление экрана pygame.display.update() |
Как видите в начале мы назначаем FPS, потом весь экран заливаем чёрным цветом, это нужно, так как суть анимации будет в том, что мы весь экран заливаем чёрным и потом рисуем объект с новой позицией, тем самым он перемешается.
Потом идёт несколько условий, зависимо от него, мы будем увеличивать или уменьшать определённую переменную которая отвечает за позицию. Условия таковы, что круг у нас будет двигаться по часовой стрелки, по квадратному пути и он должен быть не ближе к краям окна чем на 50 пикселей.
Потом создаём шар, как это делать вы узнает ев прошлой части, также переменную для цвета назначали тоже в прошлой.
Потом идёт проверка событий, у нас она пока отвечает только за закрытие программы, но об этом ниже.
Последние обновляем весь экран, или всё прорисовываем, теперь запускаем программу и шар должен перемешаться как показано ниже:
Если у вас всё работает так же, то значит всё сделано правильно. Как вы наверное уже поняли, суть создания анимации, что мы просто меняем параметр объекта и всё перерисовываем заново, не забыв перед этим всё стереть.
Обработка событий в PyGame:
Чтобы показать более наглядно обработчик событий в PyGame, немного изменю основной код программы, который был показан выше.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | while True: clock.tick(60) screen.fill(BLACK) for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() elif event.type == pygame.KEYDOWN: if event.key == pygame.K_LEFT: posX -= speed elif event.key == pygame.K_RIGHT: posX += speed elif event.key == pygame.K_UP: posY -= speed elif event.key == pygame.K_DOWN: posY += speed pygame.draw.circle(screen, GREEN, (posX, posY), 60) pygame.display.update() |
Как видите мы убрали условия и рендеринг шара поставили в низ, перед обновлением экрана.
Для обработки событий мы используем цикл for
, который проходиться по pygame.event.get()
, эта функция возвращает словарь данных о событие которое происходит прямо сейчас.
Внутри цикла мы уже используем одно условие для проверки выхода из программы/игры, это pygame.QUIT
, внутри условия мы выходим из программы.
Параметр type
, словаря event
хранит тип события, поэтому если нужно проверить тип, проверяем его.
Следующие условие проверяет нажатие клавиш на клавиатуре, внутри есть ещё условия, которые проверяют какая конкретна была нажата клавиша, параметр key
, словаря event
хранит номер клавиши.
В этих условиях мы проверяем, что были нажаты именно стрелки, и как видите, при нажатие стрелок мы меняем координаты нашего шара.
Это вот кратко как обрабатывать событие, то есть, вам нужен цикл который проходиться по словарю который хранит данные о событие, который возвращает метод pygame.event.get()
, и параметр этого словаря type
, он хранит тип события.
Вывод:
В этой статье вы прочитали про как происходит анимация в PyGame, и немного узнали про работу с событиями. Эта была заключительная часть из цикла статей, про основы PyGame, этих знаний должно хватить, чтобы сделать простую игру.