Библиотека Pygame — введение (часть 1)

Что такое Pygame?

это библиотека, которую разработчики могут использовать для создания игр. Включает компоненты для программирования следующих элементов:

  1. Графика и анимация.
  2. Звук. Сюда также входит музыка из игр.
  3. Проверять. Сюда входят мышь, клавиатура, геймпад и так далее.

Этих компонентов достаточно для создания игры любой сложности. Конечно, вам нужно понимать нюансы их использования, но все это приходит с опытом, когда вы учитесь и практикуетесь на реальных проектах.

Что такое игровой цикл и как его использовать?

Игровой цикл — это логика, заложенная в игре и постоянно текущая. Каждый цикл игры называется фреймом. В каждой из них есть огромное количество вещей, но все их можно разделить на три категории:

  1. Обработка ввода. Все эти события происходят вне игры. Это могут быть щелчки мыши, нажатия клавиш на клавиатуре и так далее.
  2. Обновление игры. Это включает в себя изменение всего, что должно быть в одном кадре. Например, если персонаж находится в воздухе, он должен упасть под действием силы тяжести. Или, если в игре на высокой скорости столкнутся две машины, они должны взорваться.
  3. Рендеринг. На этом этапе прорисовывается все, что отображается на экране: фоны, персонажи, меню. Это приводит к тому, что то, что должен видеть игрок, появляется на экране в нужном месте.

Параллельно со всеми этими составляющими есть время. Этот аспект игрового цикла тоже очень важен. Многие игроки знакомы с термином FPS. Это означает количество кадров в секунду. То есть количество кадров в секунду. Количество повторов цикла в секунду зависит от FPS. Это предотвращает слишком медленную или быструю игру.

Также нужно стараться поддерживать одинаковый FPS на разных компьютерах. Например, если персонажу нужно 10 секунд, чтобы переместиться из левой части экрана в правую, то он должен провести одинаковое количество времени на всех компьютерах.

Что такое шаблон Pygame и как его создать?

Теперь, когда пользователь понял, из чего сделана игра, пришло время узнать, как ее создать. Сначала попробуем создать простейшую программу Pygame, запускающую игровой цикл. Здесь начинается любой проект, созданный в этой библиотеке.

Во-первых, вам нужно импортировать необходимые компоненты и установить переменные основных настроек игры.

# Модель Pygame — скелет для нового проекта Pygame import pygame import random WIDTH = 360 # ширина игрового окна HEIGHT = 480 # высота игрового окна FPS = 30 # кадров в секунду Затем вам нужно открыть игровое окно. # создать игру и окно pygame.init () pygame.mixer.init () # для звука screen = pygame.display.set_mode ((WIDTH, HEIGHT)) pygame.display.set_caption («Моя игра») clock = pygame time .Часы()

pygame.init () — это команда, запускающая экран библиотеки, это окно приложения, в котором будет запускаться игровой цикл. Наконец, часы используются для установки частоты кадров.

Давайте сначала перейдем к созданию игрового цикла.

# Игровой цикл запущен = True при запуске: # Обработка входных данных (событий) # Обновление # Рендеринг (сборка)

Игровой цикл — это цикл while, управляемый переменной running. Если вам нужно выйти из игры, вам просто нужно изменить значение этой переменной на False. На этом цикл закончится. Теперь вы можете заполнить каждый раздел базовым кодом.

Каркас приложения

Теперь давайте реализуем простейшее минимальное приложение PyGame. У нас уже есть первые две строчки. Фактически, первый импортирует основной модуль, а второй импортирует множество других необходимых расширений (иначе нам пришлось бы каждый раз делать это вручную). То есть мы просто подключили сюда саму библиотеку. Что дальше? Далее сформируем само окно приложения с помощью следующей функции:

pygame.display.set_mode ((600 400))

Если мы запустим эту программу сейчас, то увидим на экране окно, которое немедленно закроется. Почему приложение так себя ведет? Дело в том, что все три строчки выполнены, а программа просто закончена. Мы увидели окно, которое затем автоматически закрылось. Чтобы он оставался на экране и отображал текущую графическую информацию, нужно добавить цикл основных событий:

То есть в нашем приложении должен быть цикл, в котором события, возникающие из очереди событий, постоянно наблюдаются и затем обрабатываются (другими словами, некоторые действия выполняются в зависимости от типа события).

Для реализации такого цикла можно создать «вечный» цикл, в котором произошедшие события будут проверяться и при необходимости обрабатываться. В простейшем виде это можно сделать так:

while1: для события в pygame.event.get (): if event.type == pygame.QUIT: exit()

Посмотрите, есть «вечный цикл», определенный здесь и внутри другого цикла for, который выбирает события из очереди событий. Сама очередь — это повторяемый объект, к которому мы обращаемся с помощью конструкции pygame.event.get (). В результате переменная события будет ссылаться на текущее событие из этой очереди. Каждое событие — это объект, который содержит разные наборы свойств. В частности, у всех событий есть свойство типа, которое мы проверяем. Если он равен константе pygame.QUIT, то наступило событие закрытия приложения. И здесь стандартная функция выхода Python действует как обработчик, который завершает работу нашего приложения. Теперь при запуске программы мы видим на экране окно, пока не закроем его. При закрытии активируется событие pygame.QUIT и программа закрывается. Если, например, вместо exit вы напишете pass, то наше окно не закроется, потому что мы фактически удалили обработчик и ничего не делаем при возникновении этого события.

Однако не всегда удобно использовать функцию exit () напрямую. Возможно, нам просто нужно завершить цикл и остановить PyGame, но продолжайте запускать программу. В этом случае вы можете использовать функцию quit () пакета PyGame:

while1: для события в pygame.event.get (): if event.type == pygame.QUIT: pygame.quit () print («Программа продолжает выполняться»)

Но когда мы закроем окно, мы увидим ошибку (исключение). Откуда это взялось? Это связано с тем, что, когда PyGame остановлен, основной цикл продолжает выполняться и пытается получить доступ к очереди событий на следующей итерации. Но эта команда больше не может быть выполнена, потому что PyGame остановился и больше не работает. Отсюда и это исключение. Поэтому мы исправим эту программу, добавив условие для основного цикла:

flRunning = Truewhile flRunning: для события в pygame.event.get (): if event.type == pygame.QUIT: pygame.quit () flRunning = False print («Программа продолжает работать»)

Теперь все работает как положено. Так выглядит минимальный каркас приложения PyGame.

Итог

Наконец, вам нужно убедиться, что по окончании игрового цикла игровое окно закрывается. Для этого вставьте функцию pygame.quit () в конец кода. Окончательная модель pygame будет выглядеть так:

# Модель Pygame — скелет для нового проекта Pygame import pygame import random WIDTH = 360 HEIGHT = 480 FPS = 30 # Установить цвета БЕЛЫЙ = (255,255,255) ЧЕРНЫЙ = (0,0,0) КРАСНЫЙ = (255,0,0) ЗЕЛЕНЫЙ = (0,255,0) СИНИЙ = (0,0,255) # Создать игру и окно pygame.init () pygame.mixer.init () screen = pygame.display.set_mode ((WIDTH, HEIGHT)) pygame.display.set_caption («Моя игра») clock = pygame.time.Clock () # Игровой цикл запущен = Tru Во время выполнения: # Поддерживать правильную скорость цикла clock.tick (FPS) # Обработка (событие) ввода для события l ‘в pygame.event get (): # управлять закрытием окна if event.type == pygame.QUIT: running = False # Refresh # Render screen.fill (BLACK) # После рендеринга всего переверните экран pygame.display.flip () pygame.quit()

Ура! У вас есть рабочая модель Pygame. Сохраните его в описательном файле, например pygame_template.py, чтобы вы могли использовать его каждый раз при создании нового проекта pygame.

How to install Pygame in python

  • Чтобы установить pygame в python, первым делом убедитесь, что у вас есть поддерживаемая версия python.
  • Теперь откройте командную строку и напишите следующую команду в cmd.

Команда для установки pygame:

pip устанавливает pygame

Создание шаблона Pygame

Теперь, когда вы знаете элементы, из которых состоит игра, можно переходить к процессу написания кода. Начать стоит с создания простой программы pygame, которая просто открывает окно и запускает игровой цикл. Это отправная точка для любого проекта pygame.

При запуске программы вам необходимо импортировать необходимые библиотеки и установить переменные основных настроек игры:

# Модель Pygame — скелет для нового проекта Pygame import pygame import random WIDTH = 360 # ширина игрового окна HEIGHT = 480 # высота игрового окна FPS = 30 # кадров в секунду

Далее вам нужно открыть окно игры:

# создать игру и окно pygame.init () pygame.mixer.init () # для звука screen = pygame.display.set_mode ((WIDTH, HEIGHT)) pygame.display.set_caption («Моя игра») clock = pygame time .Часы()

pygame.init () — это команда, запускающая pygame screen — окно программы, которое создается, когда мы устанавливаем его размер в настройках. Затем вам нужно создать часы, чтобы убедиться, что игра работает с указанной частотой кадров.

Теперь вам нужно создать игровой цикл:

# Игровой цикл запущен = Выполнено во время выполнения: # Обработка ввода (события) # Обновление # Рендеринг (сборка)

Игровой цикл — это цикл while, управляемый переменной running. Если вам нужно завершить игру, вам просто нужно изменить текущее значение на False. В итоге цикл закончится. Теперь вы можете заполнить каждый раздел базовым кодом.

Раздел рендеринга (отрисовки)

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

Компьютерные экраны состоят из пикселей, каждый из которых содержит 3 элемента: красный, зеленый и синий. Цвет пикселей зависит от того, как подсвечивается каждый элемент:Библиотека Pygame - Введение (часть 1)

Каждый из трех основных цветов может иметь значения от 0 до 255. В первом случае он полностью отсутствует, а во втором доступен. Следовательно, у каждого элемента 256 вариантов.

Чтобы узнать общее количество цветов, которые могут отображаться на экране компьютера, вам нужно увеличить это число до третьей степени (так как это только основные цвета).

Всего будет 16 777 216 цветов.

Теперь, когда мы понимаем, как работают цвета, мы можем установить их в начале приложения.

# Цвета (R, G, B) ЧЕРНЫЙ = (0, 0, 0) БЕЛЫЙ = (255, 255, 255) КРАСНЫЙ = (255, 0, 0) ЗЕЛЕНЫЙ = (0, 255, 0) СИНИЙ = (0, 0, 255) И напоследок заполнить весь экран. # Рендеринг screen.fill (ЧЕРНЫЙ)

Но этого недостаточно. Экран компьютера так не работает. Смена пикселя означает отправку команды видеокарте для передачи соответствующего изображения на экран. По стандартам ИТ это очень медленный процесс. Если вам нужно много рисовать на экране, это займет много времени. Это можно решить оригинальным способом, называемым двойной буферизацией.

Представьте, что у вас есть двусторонняя доска, которую вы можете повернуть, чтобы показать ту или иную сторону. Одна сторона покажет (то, что видит игрок), а другая останется скрытой, только компьютер может это «увидеть». С каждым кадром рендеринг будет на обратной стороне платы. Когда рендеринг завершен, доска вращается, и ее содержимое отображается игроку.

Это означает, что он отображается один раз за кадр, а не при добавлении каждого элемента. В Pygame этот процесс автоматический. Вам просто нужно проинформировать доску, чтобы она перевернулась после завершения рендеринга. Это делается с помощью команды flip().

# Рендеринг screen.fill (ЧЕРНЫЙ) # после рендеринга всего переверните экран pygame.display.flip()

Основная цель — сделать так, чтобы функция flip () отображалась в конце. Если вы попытаетесь что-то нарисовать после поворота, это изображение не появится на экране.

Контроль FPS

В разделе обновлений пока нечего вводить, но нужно убедиться, что настройка FPS контролирует скорость игры. Это можно сделать следующим образом:

во время бега: # продолжайте цикл с правильной тактовой частотой скорость (FPS)

Команда tick () просит pygame определить, сколько времени занимает цикл, а затем делает паузу, чтобы цикл (весь кадр) занимал время. Если вы установите значение FPS на 30, это означает, что длина кадра составляет 1/30, что составляет 0,03 секунды. Если цикл кода (обновление, рендеринг и т.д.) занимает 0,01 секунды, pygame остановится на 0,02 секунды.

Раздел ввода (событий)

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

События случаются всегда. Например, если во время розыгрыша игрок решает нажать кнопку прыжка, как с этим поступить? Если вы проигнорируете это, игрок будет разочарован.

Чтобы управлять этими событиями, Pygame сохраняет все события, произошедшие с последнего кадра. Даже если игрок нажимает кнопки случайным образом, ни одна из них не будет потеряна. В этом случае создается список, и с помощью цикла for все эти события могут быть зациклены.

для события в pygame.event.get (): # проверяем, закрыто ли окно, если event.type == pygame.QUIT: running = False

В нашем случае использовалось событие pygame.QUIT. После того, как пользователь нажимает кнопку «Готово», приложение запускается. В нашем случае игровой цикл заканчивается. Но вы можете задать другие действия, например вопрос, сохранять ли игровой прогресс.

Pygame module in python

Pygame имеет модули, pygame.draw используется для рисования фигур на поверхности.

  • pygame.draw.circle — эта функция используется для рисования круга вокруг точки.
  • pygame.draw.rect — эта функция используется для рисования прямоугольной формы.
  • pygame.draw.polygon — эта функция используется для рисования фигуры с любым количеством сторон.
  • pygame.draw.ellipse — эта функция используется для рисования круглой формы внутри прямоугольника.
  • pygame.draw.line — эта функция используется для рисования прямой линии.
  • pygame.draw.arc — эта функция рисует часть эллипса.
  • pygame.draw.lines — эта функция рисует несколько смежных сегментов линии.

 

Оцените статью
Блог о Python