Как сделать окна Pygame маленькими

Обновлено: 05.07.2024

Этот модуль позволяет управлять отображением pygame. Pygame имеет одну поверхность отображения, которая либо содержится в окне, либо работает в полноэкранном режиме. Создав дисплей, вы относитесь к нему как к обычной поверхности. Изменения не сразу видны на экране; вы должны выбрать одну из двух функций перелистывания, чтобы обновить фактический дисплей.

Начало отображения, где x = 0 и y = 0, – левый верхний угол экрана. Обе оси положительно увеличиваются по направлению к правому нижнему углу экрана.

Дисплей pygame можно инициализировать в одном из нескольких режимов. По умолчанию дисплей представляет собой базовый программный буфер кадра. Вы можете запросить специальные модули, такие как автоматическое масштабирование или поддержка OpenGL. Они управляются флагами, переданными в pygame.display.set_mode() .

В Pygame одновременно может быть активен только один дисплей. Создание нового с помощью pygame.display.set_mode() закроет предыдущий дисплей. Чтобы определить количество и размер подключенных экранов, вы можете использовать pygame.display.get_desktop_sizes, а затем выбрать соответствующий размер окна и индекс отображения для передачи в pygame.display.set_mode() .

Для обратной совместимости pygame.display позволяет точно управлять форматом пикселей или разрешением экрана. Раньше это было необходимо для старых графических карт и ЭЛТ-экранов, но обычно больше не требуется. Используйте функции pygame.display.mode_ok() , pygame.display.list_modes() и pygame.display.Info() для запроса подробной информации о дисплее.

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

Когда установлен режим отображения, несколько событий помещаются в очередь событий pygame. pygame.QUIT отправляется, когда пользователь запрашивает завершение работы программы. Окно будет получать события pygame.ACTIVEEVENT по мере того, как дисплей получает и теряет фокус ввода. Если отображение установлено с флагом pygame.RESIZABLE, события pygame.VIDEORESIZE будут отправляться, когда пользователь регулирует размеры окна. Аппаратные дисплеи, которые рисуют прямо на экране, получат события pygame.VIDEOEXPOSE, когда части окна должны быть перерисованы.

В pygame 2.0.1 появился новый API-интерфейс windowevent. Дополнительные сведения об этом см. в документации по модулю событий

В некоторых средах отображения есть возможность автоматического растягивания всех окон. Когда эта опция включена, это автоматическое растяжение искажает внешний вид окна pygame. В каталоге примеров pygame есть пример кода (prevent_display_stretching.py), который показывает, как отключить это автоматическое растяжение отображения pygame в Microsoft Windows (требуется Vista или новее).

Инициализирует модуль отображения pygame. Модуль дисплея не может ничего делать, пока он не будет инициализирован. Обычно это делается автоматически при вызове pygame.init() более высокого уровня.

При инициализации Pygame выберет один из нескольких внутренних интерфейсов отображения. Режим отображения будет выбран в зависимости от платформы и разрешений текущего пользователя. Перед инициализацией модуля дисплея переменная среды SDL_VIDEODRIVER может быть установлена ​​для управления используемым бэкендом. Здесь перечислены системы с несколькими вариантами выбора.

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

Безвредно вызывать это более одного раза, повторные вызовы не имеют никакого эффекта.

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

Безвредно вызывать это более одного раза, повторные вызовы не имеют никакого эффекта.

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

Обратите внимание, что вызов этой функции неявно инициализирует pygame.display , если он не был инициализирован ранее.

Аргумент size представляет собой пару чисел, представляющих ширину и высоту. Аргумент flags представляет собой набор дополнительных параметров. Аргумент глубины представляет количество битов, используемых для цвета.

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

Если размер не передан или установлен в (0, 0) и pygame использует SDL версии 1.2.10 или выше, созданный Surface будет иметь тот же размер, что и текущее разрешение экрана.Если только ширина или высота установлены на 0 , поверхность будет иметь ту же ширину или высоту, что и разрешение экрана. Использование версии SDL до 1.2.10 вызовет исключение.

Обычно лучше не передавать аргумент глубины. По умолчанию будет установлена ​​лучшая и самая быстрая глубина цвета для системы. Если ваша игра требует определенного цветового формата, вы можете управлять глубиной с помощью этого аргумента. Pygame будет эмулировать недоступную глубину цвета, что может быть медленным.

При запросе полноэкранных режимов иногда невозможно точное соответствие запрошенному размеру. В этих ситуациях pygame выберет наиболее близкое совместимое совпадение. Возвращаемая поверхность всегда будет соответствовать запрошенному размеру.

На дисплеях с высоким разрешением (4k, 1080p) и играх с крошечной графикой (640 x 480) они отображаются очень маленькими, поэтому в них невозможно играть. SCALED увеличивает размер окна. Игра думает, что это окно размером 640x480, но на самом деле оно может быть больше. События мыши масштабируются для вас, поэтому вашей игре это не нужно. Обратите внимание, что SCALED считается экспериментальным API и может измениться в будущих версиях.

Аргумент flags определяет, какой тип отображения вы хотите. Есть несколько на выбор, и вы даже можете комбинировать несколько типов, используя побитовый или оператор (символ вертикальной черты «|»). Вот флаги отображения, которые вы хотите выбрать:

Новое в pygame 2.0.0: МАСШТАБИРОВАНО, ПОКАЗАНО и СКРЫТО

Установив для параметра vsync значение 1, можно получить дисплей с вертикальной синхронизацией, но это не гарантируется. Запрос вообще работает только для вызовов set_mode() с установленными флагами pygame.OPENGL или pygame.SCALED и по-прежнему не гарантируется даже при одном из этих установленных флагов. То, что вы получите, зависит от конфигурации оборудования и драйверов системы, на которой работает pygame. Вот пример использования вызова set_mode(), который может дать вам отображение с vsync:

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

Новое в pygame 2.0.0: вертикальная синхронизация

Индекс дисплея 0 означает, что используется дисплей по умолчанию. Если аргумент индекса отображения не указан, отображение по умолчанию можно переопределить с помощью переменной среды.

Изменено в pygame 1.9.5: добавлен аргумент display

Возвращает ссылку на установленную в данный момент поверхность отображения. Если режим отображения не был установлен, возвращается None.

Это обновит содержимое всего дисплея. Если в вашем режиме отображения используются флаги pygame.HWSURFACE и pygame.DOUBLEBUF на pygame 1, будет ожидаться вертикальная обратная трассировка и меняются местами поверхности.

При использовании режима отображения pygame.OPENGL выполняется замена буфера gl.

Эта функция похожа на оптимизированную версию pygame.display.flip() для программных дисплеев. Это позволяет обновлять только часть экрана, а не всю область. Если аргумент не передан, обновляется вся область Surface, например pygame.display.flip() .

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

Этот вызов нельзя использовать на дисплеях pygame.OPENGL, и он вызовет исключение.

Pygame выбирает один из множества доступных серверных модулей отображения при инициализации. Это возвращает внутреннее имя, используемое для серверной части дисплея. Это можно использовать для предоставления ограниченной информации о возможностях отображения, которые могут быть ускорены. См. флаги SDL_VIDEODRIVER в pygame.display.set_mode(), чтобы увидеть некоторые общие параметры.

Создает простой объект, содержащий несколько атрибутов для описания текущей графической среды. Если это вызывается перед pygame.display.set_mode(), некоторые платформы могут предоставить информацию о режиме отображения по умолчанию. Это также можно вызвать после установки режима отображения, чтобы убедиться, что определенные параметры отображения удовлетворены. Объект VidInfo имеет несколько атрибутов:

Создает словарь, заполненный строковыми ключами. Строки и значения произвольно создаются системой. В некоторых системах может не быть информации, и будет возвращен пустой словарь. Большинство платформ возвращают ключ "окно" со значением, равным системному идентификатору текущего дисплея.

Новое в pygame 1.7.1.

Эта функция возвращает размеры настроенных в данный момент виртуальных рабочих столов в виде списка кортежей (x, y) целых чисел.

Длина списка не совпадает с количеством подключенных мониторов, поскольку рабочий стол можно зеркально отразить на нескольких мониторах. Размеры рабочего стола указывают не на максимальное разрешение монитора, поддерживаемое аппаратным обеспечением, а на размер рабочего стола, настроенный в операционной системе.

Для того, чтобы подогнать окна под размер рабочего стола в том виде, в каком они настроены в данный момент, и соблюдать разрешение, настроенное операционной системой в полноэкранном режиме, эту функцию следует заменить во многих случаях использования pygame. .display.list_modes(), если применимо.

Новое в pygame 2.0.0.

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

Если глубина равна 0 , используется текущая/наилучшая глубина цвета для дисплея. По умолчанию флаги равны pygame.FULLSCREEN , но вам может потребоваться добавить дополнительные флаги для определенных полноэкранных режимов.

Индекс дисплея 0 означает, что используется дисплей по умолчанию.

Начиная с pygame 2.0, pygame.display.get_desktop_sizes() переняла некоторые варианты использования от pygame.display.list_modes():

Чтобы найти подходящий размер для неполноэкранных окон, предпочтительно использовать pygame.display.get_desktop_sizes(), чтобы получить размер текущего рабочего стола, а затем выбрать меньший размер окна. . Таким образом, окно гарантированно помещается, даже если монитор настроен на более низкое разрешение, чем максимальное поддерживаемое оборудованием.

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

Изменено в pygame 1.9.5: добавлен аргумент display

Эта функция использует те же аргументы, что и pygame.display.set_mode(). Он используется для определения доступности запрошенного режима отображения. Он вернет 0, если режим отображения не может быть установлен. В противном случае будет возвращена глубина в пикселях, которая лучше всего соответствует запрошенному отображению.

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

Функция вернет 0, если переданные флаги отображения не могут быть установлены.

Индекс дисплея 0 означает, что используется дисплей по умолчанию.

Изменено в pygame 1.9.5: добавлен аргумент display

После вызова pygame.display.set_mode() с флагом pygame.OPENGL рекомендуется проверить значение всех запрошенных атрибутов OpenGL. См. список допустимых флагов в pygame.display.gl_set_attribute().

При вызове pygame.display.set_mode() с флагом pygame.OPENGL Pygame автоматически обрабатывает установку таких атрибутов OpenGL, как цвет и двойная буферизация. OpenGL предлагает несколько других атрибутов, которыми вы, возможно, захотите управлять. Передайте один из этих атрибутов в качестве флага и его соответствующее значение. Это должно быть вызвано до pygame.display.set_mode() .

Многие настройки являются требуемым минимумом. Создание окна с контекстом OpenGL завершится ошибкой, если OpenGL не сможет предоставить запрошенный атрибут, но он может, например, предоставить вам буфер трафарета, даже если вы его не запрашиваете, или он может предоставить вам буфер большего размера, чем запрошено.

Включить ли мультисэмплирование сглаживания. По умолчанию 0 (отключено).

Установите для GL_MULTISAMPLESAMPLES значение выше 0, чтобы управлять степенью сглаживания. Типичное значение – 2 или 3.

Минимальный размер буфера трафарета в битах. По умолчанию 0.

Минимальный размер буфера глубины в битах. По умолчанию 16.

1 включает стереофоническое 3D. По умолчанию 0.

Минимальный размер буфера кадра в битах. По умолчанию 0.

Новое в pygame 2.0.0: Дополнительные атрибуты:

Задает для профиля OpenGL одно из следующих значений:

Установите значение 1, чтобы требовалось аппаратное ускорение, или значение 0, чтобы принудительно выполнить программную визуализацию. По умолчанию разрешены оба варианта.

Возвращает значение True, если поверхность дисплея активно отображается на экране и может быть видна пользователю. Это состояние по умолчанию сразу после pygame.display.set_mode() . Этот метод может возвращать значение True, даже если приложение полностью скрыто за окном другого приложения.

Это вернет значение False, если поверхность дисплея была свернута в значок или свернута (либо с помощью pygame.display.iconify(), либо с помощью специального метода ОС, такого как значок свертывания, доступный на большинстве рабочих столов).

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

Эта функция, возвращающая True, не связана с тем, имеет ли приложение фокус ввода. См. pygame.key.get_focused() и pygame.mouse.get_focused() для API, связанных с фокусом ввода.

Запросите, чтобы окно отображаемой поверхности отображалось в виде значка или скрывалось.Не все системы и дисплеи поддерживают отображение в виде значков. Функция вернет True в случае успеха.

Когда дисплей иконизирован, pygame.display.get_active() вернет False . Очередь событий должна получить событие ACTIVEEVENT, когда окно было иконизировано. Кроме того, очередь событий также получает событие WINDOWEVENT_MINIMIZED, когда окно иконируется в pygame 2.

Переключает окно отображения между оконным и полноэкранным режимами. Поддержка драйвера дисплея невелика при использовании pygame 1, но при использовании pygame 2 это самый надежный способ переключения в полноэкранный режим и обратно.

Поддерживаемые драйверы дисплея в pygame 1:

  • x11 (Linux/Unix)

  • wayland (Linux/Unix)

Поддерживаемые драйверы дисплея в pygame 2:

  • окна (Windows)

  • x11 (Linux/Unix)

  • wayland (Linux/Unix)

  • какао (OSX/Mac)

Установите значения гаммы красного, зеленого и синего цветов на оборудовании дисплея. Если зеленый и синий аргументы не переданы, они оба будут такими же, как красный. Не все системы и оборудование поддерживают линейное изменение гаммы. В случае успеха функция возвращает значение True .

При значении гаммы 1,0 создается линейная таблица цветов. Более низкие значения сделают дисплей темнее, а более высокие значения сделают его ярче.

Установите красную, зеленую и синюю гамма-рампы с помощью таблицы поиска. Каждый аргумент должен быть последовательностью из 256 целых чисел. Целые числа должны находиться в диапазоне от 0 до 0xffff . Не все системы и оборудование поддерживают линейное изменение гаммы. В случае успеха функция возвращает значение True .

Задает значок времени выполнения, который система будет использовать для представления окна дисплея. Все окна по умолчанию используют простой логотип pygame для значка окна.

Обратите внимание, что вызов этой функции неявно инициализирует pygame.display , если он не был инициализирован ранее.

Вы можете пройти через любую поверхность, но большинству систем требуется изображение меньшего размера, примерно 32 x 32. Изображение может иметь прозрачность цветового ключа, которая будет передана в систему.

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

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

Возвращает заголовок и заголовок значка для поверхности дисплея. Часто это будет одно и то же значение.

Возвращает количество доступных дисплеев. Это всегда 1, если pygame.get_sdl_version() получает номер версии SDL, возвращает основной номер версии ниже 2.

Новое в pygame 1.9.5.

Возвращает размер окна, инициализированного с помощью pygame.display.set_mode(). Инициализирует окно или экран для отображения. Это может отличаться от размера поверхности дисплея, если используется МАСШТАБ.

Новое в pygame 2.0.0.

Указывает, разрешено ли запускать заставку во время работы приложения. По умолчанию — Ложь. По умолчанию pygame не разрешает использование заставки во время игры.

Некоторые платформы не имеют заставки или не поддерживают ее отключение. См. pygame.display.set_allow_screensaver() Укажите, может ли заставка запускаться при предостережениях с поддержкой заставки.

Новое в pygame 2.0.0.

Укажите, следует ли разрешать использование экранных заставок во время работы приложения. Значение по умолчанию — Ложь. По умолчанию pygame не разрешает использование заставки во время игры.

Если заставка была запрещена из-за этой функции, она будет автоматически разрешена для запуска при вызове pygame.quit() uninitialize всех модулей pygame.

На значение по умолчанию можно повлиять с помощью переменной среды SDL_HINT_VIDEO_ALLOW_SCREENSAVER , для которой можно установить значение 0 (отключить) или 1 (включить).

Отключение заставки зависит от поддержки платформы. Когда поддержка платформы отсутствует, эта функция будет тихо работать, даже если состояние скринсейвера не изменилось. Отсутствие обратной связи связано с тем, что SDL не предоставляет какого-либо поддерживаемого метода для определения того, поддерживает ли он изменение состояния заставки. SDL_HINT_VIDEO_ALLOW_SCREENSAVER доступен в SDL 2.0.2 или более поздней версии. SDL1.2 не реализует это.

Иногда вам может понадобиться, чтобы пользователь мог изменять размер окна Pygame, что вы обычно делаете, щелкнув угол окна и перетащив его мышью. Это достаточно легко сделать, используя флаг RESIZABLE при вызове set_mode. Pygame информирует ваш код, если пользователь изменил размер окна, отправляя событие VIDEORESIZE, которое содержит новую ширину и высоту окна. Когда вы получаете одно из этих событий, вы должны вызвать pygame. display.set_mode еще раз, чтобы настроить отображение на новые размеры. В листинге 3-5 показано, как реагировать на события VIDEORESIZE.

Листинг 3-5. Использование окна с изменяемым размером background_image_filename = 'sushiplate.jpg'

импортировать pygame из pygame.locals import * from sys import exit

screen = pygame.display.set_mode(SCREEN_SIZE, RESIZABLE, 32) background = pygame.image.load(background_image_filename).convert() пока True:

if event.type == VIDEORESIZE: SCREEN_SIZE = event.size screen = pygame.display.set_mode(SCREEN_SIZE, RESIZABLE, 32) pygame.display.set_caption("Размер окна изменен на "+str(event.size))< /p>

ширина_экрана, высота_экрана = SCREEN_SIZE

для y в диапазоне (0, screen_height, background.get_height()): для x в диапазоне (0, screen_width, background.get_width()): screen.blit(background, (x, y))

Когда вы запустите этот скрипт, он отобразит простое окно Pygame с фоновым изображением. Если щелкнуть угол или край окна и перетащить мышью, скрипт получит событие VIDEORESIZE. В обработчике этого сообщения есть еще один вызов set_mode, который создает новую поверхность экрана, соответствующую новым размерам. Сообщение об изменении размера содержит следующие значения:

• size — кортеж, содержащий новые размеры окна; size[0] — это ширина, а size[1] — это высота.

• w — это значение содержит новую ширину окна. Это то же значение, что и size[0], но может быть более удобным.

• h — это значение содержит новую высоту окна. Это то же значение, что и size[1], но может быть более удобным.

Поскольку размер дисплея может меняться в этом скрипте, мы рисуем фон немного по-другому, копируя фоновое изображение столько раз, сколько необходимо для покрытия дисплея. Два вызова range производят координаты, необходимые для размещения этих нескольких фоновых изображений.

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

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

Документация Pygame также устанавливается вместе с самим Pygame. Они находятся в site-packages/pygame/docs и доступны с помощью:

Почему в IDLE окно Pygame не закрывается корректно?¶

Это вызвано интерпретатором Python IDLE, который каким-то образом сохраняет ссылки. Убедитесь, что вы вызываете pygame.quit() при выходе из приложения или игры.

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

В Windows, если вы открываете файл Python с помощью «>щелчка правой кнопкой мыши: Редактировать в режиме ожидания», редактор и интерактивная подсказка запускаются из одного и того же процесса Python. Чтобы убедиться, что игра запускается в отдельном процессе, сначала запустите IDLE из меню "Пуск" (он находится в разделе Python X.X в разделе программ), а затем откройте окно редактирования игры.

SDL, на котором основан Pygame, использует переменную среды SDL_VIDEO_CENTERED, чтобы указать, что окна должны располагаться по центру. Обратите внимание, что переменная среды устанавливается до того, как Pygame инициализируется вызовом init().

Почему это недокументировано? Хотя SDL распознает несколько переменных среды, которые устанавливают начальные условия, их использование является неофициальным. Но они существуют достаточно долго, и вряд ли изменятся сейчас. Предоставляется список переменных среды, распознаваемых SDL 1.2. Другие настраиваемые параметры включают в себя используемые видео- и аудиодрайверы, а также идентификатор существующего окна для рисования.

Как установить видеодрайвер, который использует Pygame?¶

SDL, на котором основан Pygame, проверяет переменную среды SDL_VIDEODRIVER на наличие используемого видеодрайвера. Если он не найден, он использует значение по умолчанию для операционной системы. Этот фрагмент кода устанавливает для драйвера «windib» для Windows. Обратите внимание, что переменная окружения должна быть установлена ​​до того, как Pygame будет инициализирован вызовом pygame.init().

Здесь приведен список поддерживаемых видеодрайверов. См. «Как мне центрировать окно pygame на экране?» выше для получения дополнительной информации.

Исходное положение окна Pygame можно задать с помощью переменной среды SDL_VIDEO_WINDOW_POS. Он принимает строку, состоящую из двух целых значений, разделенных запятыми. Позиция — левый верхний угол окна в экранных координатах.

Какие переменные среды распознает Pygame/SDL?¶

Разное¶

Работает ли Pygame с Python 3?¶

Да. Pygame 1.9.2 поддерживает Python 3.2 и выше. Только потерянный модуль _movie (не созданный по умолчанию) не работает.

Почему функции рисования оставляют незаполненные пиксели (отверстия) в толстых кругах или дугах?¶

Почему рисование толстых кругов или дуг дает «муаровые узоры»?¶

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

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



Мартин Макбрайд, 04.03.2021
Теги окно разработки игры
Категории pygame

В этом разделе мы создадим самую простую программу pygame. Это даже не игра, просто отображается пустое окно и ждет, пока вы его закроете.

В чем смысл? Что ж, он представляет базовую форму, которую принимают все программы pygame, без каких-либо дополнительных помех или сложностей. Почти каждая игра, которую вы создаете, начинается примерно так.

Структура кода

Основная структура pygame-игры обычно выглядит примерно так:

Начнем с инициализации модуля pygame и всего остального, что нужно нашей игре — персонажей, реквизита, звуков, количества жизней и т. д.

Затем мы создаем главное окно. Каждой игре нужно окно, как и любой другой программе пользовательского интерфейса.

Далее мы входим в основной игровой цикл. Этот цикл будет работать вечно или до тех пор, пока пользователю не надоест. Он использует логическое значение с именем running, которое управляет циклом. Если мы установим для run значение false в любом месте цикла, игра завершится.

Внутри цикла мы в основном делаем две основные вещи:

  • Проверка любого пользовательского ввода, например нажатия клавиши или перемещения мыши или джойстика.
  • Обновление состояния игры — основная часть игры, в которой мы перемещаем объекты, проверяем наличие столкновений, издаем звуки, начисляем очки, подсчитываем очки и все остальное.

Минимальная игра

В этом разделе мы реализуем урезанную версию приведенного выше кода, который делает следующее:

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

Код

Вот код:

Вот результат:


Вот шаг за шагом. Сначала немного импорта и определений:

Мы импортируем основной модуль pygame. Мы импортируем его как pg, что просто означает, что везде в нашем коде, где мы используем pygame, мы можем называть его pg. Он просто немного короче, и, поскольку мы используем pygame повсеместно, маловероятно, что мы забудем, что означает pg.

Мы также определяем ширину и высоту экрана в пикселях.

Далее мы инициализируем pygame. Это просто позволяет pygame делать все, что нужно, прежде чем мы начнем его использовать:

Следующая строка создает окно. Передаем размер окна:

Теперь основной цикл:

Основное действие этого цикла — вызов pg.event.get() . Это обнаруживает любые «события», которые могли произойти. Это такие вещи, как нажатия клавиш и щелчки мышью.

pg.event.get() фактически возвращает список событий. Это связано с тем, что одновременно может произойти более одного события — например, вы можете перемещать мышь и одновременно нажимать клавишу пробела. Таким образом, метод get возвращает список всех событий, и наш код циклически перебирает события в поисках события QUIT. Мы игнорируем любые другие события.

Список будет пустым, если не произошло ни одного события.

Наконец-то мы вышли из pygame. Это дает pygame возможность убрать за собой:

Запуск кода

Когда вы запускаете код, вы должны увидеть небольшое окно с черным фоном. Если вы закроете окно (нажав кнопку X в строке заголовка), окно закроется, и программа завершится.

Исходный код доступен на github как simplewindow.py.

Если эта статья оказалась для вас полезной, возможно, вас заинтересует книга «Компьютерная графика в Python» или другие книги того же автора.

Читайте также: