Pygame как сделать окно

Добавил пользователь Евгений Кузнецов
Обновлено: 05.10.2024

wikiHow работает по принципу вики, а это значит, что многие наши статьи написаны несколькими авторами. При создании этой статьи над ее редактированием и улучшением работали, в том числе анонимно, 9 человек(а).

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

pygame - это библиотека модулей для языка Python, созданная для разработки 2D игр.

Для того чтобы установить pygame на свой компьютер необходимо открыть командную строку или терминал и написать команду

pip3 install pygame

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

Пользователь может взаимодействовать с нашей игрой. Каждое действие пользователя - это некоторое событие , которое мы можем обработать . Выражение pygame.event.get() - это список событий, произошедших в нашей игре.

Цикл for просто перебирает необработанные события. Каждое событие он присваивает переменной event (можно написать любую другую).

Поговорим о цикле while , основном цикле игры . Как часто он выполняется? Очень и очень часто, это зависит от мощности компьютера. Для обновления экрана в играх часто используют 60 кадров в секунду.

Ограничим количество выполнений цикла.

import pygame
from sys import exit

display = pygame.display. set_mode ( ( 800 , 600 ) )

Методу tick() передается желаемое количество кадров в секунду. Задержку он вычисляет сам. На каждой итерации основного цикла игры секунда делится на 60 и на вычисленную величину выполняется задержка.

В библиотеке pygame существует множество функций для рисования различных фигур.

Функция polygon() рисует произвольную фигуру. Она принимает 3 обязательных параметра (поверхность, цвет и кортеж координат) и 1 необязательный (толщину линий).

import pygame
from sys import exit

display = pygame.display. set_mode ( ( 800 , 600 ) )

FPS = 60
clock = pg.time. Clock ()
while True :
f or event in pygame.event. get ():
if event.type == pygame.QUIT:
pygame. quit ()
exit ()

display - наша поверхность

(255, 0, 0) - красный цвет , почитайте про rgb

( (0, 0), (100, 0), (100, 100), (0, 100) ) - координаты вершин квадрата. Возьмите листочек и нарисуйте его координатах (замените сотню на единицу).

Давайте нарисуем треугольник

import pygame
from sys import exit

display = pygame.display. set_mode ( ( 800 , 600 ) )

(0, 0, 255) - синий цвет

((100, 100), (200, 200), (100, 200)) - координаты вершин нашего треугольник.

Самостоятельно нарисуйте пятиугольник (вам помогут карандаш и лист бумаги)

Рисование окружностей

Чтобы нарисовать окружность нужно вызвать метод circle из модуля draw. Команда выглядит так: pygame.draw.circle(display, color, position, radius).

display - поверхность, на которой рисуем

color - цвет, записанный в кортеже из трех чисел. (еще раз про rgb)

position - координаты точки центра окружности ( кортеж из двух чисел (x, y) )

radius - радиус окружности в пикселях

import pygame
from sys import exit

display = pygame.display. set_mode ( ( 800 , 600 ) )

FPS = 60
clock = pg.time. Clock ()
while True :
f or event in pygame.event. get ():
if event.type == pygame.QUIT:
pygame. quit ()
exit ()

display - наша поверхнотсть для рисования

(255, 255, 0) - желтый цвет

(400, 200) - координаты точки центра (в нашем случае 400 пикселей от верхнего левого угла по горизонтали и 200 пикселей по вертикали)

100 - радиус нашей окружности в пикселях

Объявления переменных для цветов

Для нашего с вами удобства давайте объявим несколько переменных, в которые сохраним используемые нами цвета

import pygame
from sys import exit

WHITE = ( 255 , 255 , 255 )
BLACK = ( 0 , 0 , 0 )
PURPLE = ( 156 , 39 , 176 )
INDIGO = ( 63 , 81 , 181 )
BLUE = ( 33 , 150 , 243 )
GREEN = ( 76 , 175 , 80 )
YELLOW = ( 255 , 235 , 59 )
ORANGE = ( 255 , 152 , 0 )
GREY = ( 158 , 158 , 158 )

display = pygame.display. set_mode ( ( 800 , 600 ) )

FPS = 60
clock = pg.time. Clock ()
while True :
f or event in pygame.event. get ():
if event.type == pygame.QUIT:
pygame. quit ()
exit ()

Рисование прямоугольников

Для отрисовки прямоугольников можно использовать метод rect.

pygame.draw.rect(display, color, (x, y, width, height) )

color - цвет (теперь можно просто написать имя переменную)

(x, y, width, height) - кортеж из четырех значений. Первые два значения - это координаты верхнего левого угла прямоугольника, а два последних - это ширина и высота.

import pygame
from sys import exit

WHITE = ( 255 , 255 , 255 )
BLACK = ( 0 , 0 , 0 )
PURPLE = ( 156 , 39 , 176 )
INDIGO = ( 63 , 81 , 181 )
BLUE = ( 33 , 150 , 243 )
GREEN = ( 76 , 175 , 80 )
YELLOW = ( 255 , 235 , 59 )
ORANGE = ( 255 , 152 , 0 )
GREY = ( 158 , 158 , 158 )

display = pygame.display. set_mode ( ( 800 , 600 ) )

FPS = 60
clock = pg.time. Clock ()
while True :
f or event in pygame.event. get ():
if event.type == pygame.QUIT:
pygame. quit ()
exit ()

Если ваша творческая натура требует большего, то вот ссылка на документацию модулю draw

Там можно найти рисование линий, дуг, эллипсов.

Большой пример ( запусти его у себя на компьтере:

Компьютеры. Интернет. Профессиональное обучение. 055-966-10-17

Наши преимущества

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

Дополнительные материалы

  • API WEB - уведомлений (Notifications)
  • CSS - шрифты
  • CSS3 адаптивные блоки (Flex Box Model)
  • HTML5 - элемент CANVAS, рисование
  • HTML5 семантические элементы
  • Joomla, компонент Sourcerer
  • Visual Studio Code для HTML, CSS, SASS, JavaScript
  • WordPress - дочерние темы
  • Вставка видео в HTML документ
  • Построение многоязычных сайтов на CMS WordPress
  • Создание шаблонов для Joomla 3.x

Библиотека PyGame

Основные модули пакета Pygame

Модуль Назначение
pygame.cdrom Доступ к CD-приводам и управление ими
pygame.cursors Загружает изображения курсора
pygame.display Доступ к дисплею
pygame.draw Рисует фигуры, линии и точки
pygame.event Управление внешними событиями
pygame.font Использует системные шрифты
pygame.image Загружает и сохраняет изображение
pygame.joystick Использует джойстики и аналогичные устройства
pygame.key Считывает нажатия клавиш с клавиатуры
pygame.mixer Загружает и воспроизводит мелодии
pygame.mouse Управляет мышью
pygame.movie Воспроизведение видеофайлов
pygame.music Работает с музыкой и потоковым аудио
pygame.overlay Доступ к расширенным видеоизображениям
pygame Содержит функции Pygame высокого уровня
pygame.rect Управляет прямоугольными областями
pygame.sndarray Манипулирует звуковыми данными
pygame.sprite Управление движущимися изображениями
pygame.surface Управляет изображениями и экраном
pygame.surfarray Манипулирует данными пикселей изображения
pygame.time модуль pygame для управления временем и частотой кадров
pygame.transform Изменение размера и перемещение изображений

Окно PyGame

Подключение библиотеки PyGame

Окно игры: размер, позиция

gameScreen = pygame.display.set_mode((400, 300))

модуль os - позиция окна

os.environ['Sp_VIDEO_WINDOW_POS'] = "%d,%d" % (x,y)

Цикл игры, выход из игры

Отслеживание события: "закрыть окно"

for event in pygame.event.get():

if event.type == pygame.QUIT: runGame = False

Выход из игры: pygame.quit()

Рисование базовых элементов

pygame.draw

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

rect(Surface, color, Rect, wiph=0) -> Rect
polygon(Surface, color, pointlist, wiph=0) -> Rect
circle(Surface, color, pos, radius, wiph=0) -> Rect
ellipse(Surface, color, Rect, wiph=0) -> Rect
arc(Surface, color, Rect, start_angle, stop_angle, wiph=1) -> Rect
line(Surface, color, start_pos, end_pos, wiph=1) -> Rect
lines(Surface, color, closed, pointlist, wiph=1) -> Rect
aaline(Surface, color, startpos, endpos, blend=1) -> Rect
aalines(Surface, color, closed, pointlist, blend=1) -> Rect

Загрузка изображения

Модуль pygame.image позволяет загрузить изображерие из файла и возвращает объект типа Surface.

pygame.image.load("путь к файлу" )

загрузить новое изображение из файла

Загрузить изображение (путь к файлу для Windows)

определить место размещения

выгрузить объект Surface, который содержит загруженное из файла изображение (myImage), в описанное место на экране (myRect)

Объект Rect

Rect(left, top, wiph, height) -> Rect

Rect((left, top), (wiph, height)) -> Rect

Методы работы с Rect

pygame.Rect.copy Возвращает новый прямоугольник, имеющий ту же позицию и размер, что и оригинал.
pygame.Rect.move Возвращает новый прямоугольник, перемещаемый данным смещением. Аргументы x и y могут быть любым целочисленным значением, положительным или отрицательным.
pygame.Rect.move_ip То же, что и метод Rect.move (), но работает на месте.
pygame.Rect.inflate увеличивать или уменьшать размер прямоугольника, на месте
pygame.Rect.inflate_ip увеличивать или уменьшать размер прямоугольника, на месте
pygame.Rect.clamp перемещает прямоугольник внутри другого
pygame.Rect.clamp_ip перемещает прямоугольник внутри другого, на месте
pygame.Rect.clip обрезает прямоугольник внутри другого
pygame.Rect.union соединяет два прямоугольника в один
pygame.Rect.union_ip соединяет два прямоугольника в один, на месте
pygame.Rect.unionall объединение многих прямоугольников
pygame.Rect.unionall_ip объединение многих прямоугольников, на месте
pygame.Rect.fit изменить размер и переместить прямоугольник учмиывая соотношение сторон
pygame.Rect.normalize корректировать отрицательные размеры
pygame.Rect.contains проверить, находится ли один прямоугольник внутри другого
pygame.Rect.collidepoint проверить, находится ли точка внутри прямоугольника
pygame.Rect.colliderect тест, пересекаются ли два прямоугольника
pygame.Rect.collidelist проверить, пересекается ли хоть один прямоугольник в списке
pygame.Rect.collidelistall пересекаются ли все прямоугольники в списке
pygame.Rect.collidedict проверить, если один прямоугольник в словаре пересекается
pygame.Rect.collidedictall пересекаются ли все прямоугольники в словаре

Обработка событий

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

Функция get в модуле pygame.event возвращает последнее событие, ожидающее в очереди и удаляет его из очереди.

Объект event

модуль для обработки очереди событий

pygame.event.pump Если вы не используете другие функции событий в своей игре, вы должны вызвать pygame.event.pump (), чтобы позволить pygame обрабатывать внутренние действия
pygame.event.get получает события из очереди
pygame.event.poll получить одно событие из очереди
pygame.event.wait ждёт одиночного события из очереди
pygame.event.peek проверить, ждут ли очереди события определённого типа
pygame.event.clear удалить все события из очереди
pygame.event.event_name возвращает имя для типа события. Строка находится в стиле WordCap
pygame.event.set_blocked проверяет, какие события не разрешены в очереди
pygame.event.set_allowed проверяет, какие события разрешены в очереди
pygame.event.get_blocked проверить, заблокирован ли тип события из очереди
pygame.event.set_grab проверяет совместное использование устройств ввода с другими приложениями
pygame.event.get_grab проверить, работает ли программа на устройствах ввода данных
pygame.event.post поместить новое событие в очередь
pygame.event.Event создать новый объект события
pygame.event.EventType Объект Python, представляющий событие SDL. Экземпляры пользовательских событий создаются с вызовом функции Event. Тип EventType не может быть напрямую вызван. Экземпляры EventType поддерживают назначение и удаление атрибутов.

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

pygame.mouse.get_pressed получить состояние кнопок мыши
pygame.mouse.get_pos получить позицию курсора мыши
pygame.mouse.get_rel получить количество движений мыши
pygame.mouse.set_pos установить позицию курсора мыши
pygame.mouse.set_visible скрыть или показать курсор мыши
pygame.mouse.get_focused проверяет, принимает ли дисплей ввод мыши
pygame.mouse.set_cursor установить изображение для курсора мыши
pygame.mouse.get_cursor получить изображение для курсора мыши

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

Когда режим отображения (display) установлен, очередь событий начнет принимать события мыши. Кнопки мыши генерируют события pygame.MOUSEBUTTONDOWN и pygame.MOUSEBUTTONUP, когда они нажимаются и отпускаются. Эти события содержат атрибут кнопки, указывающий, какая кнопка была нажата. Колесо мыши будет генерировать pygame.MOUSEBUTTONDOWN и pygame.MOUSEBUTTONUP события при прокрутке.

Когда колесо повернуто вверх, кнопка будет установлена на 4, вниз -5. Всякий раз, когда мышь перемещается, генерируется событие pygame.MOUSEMOTION. Движение мыши разбито на небольшие и точные события движения. По мере перемещения мыши многие события движения будут помещены в очередь. События движения мыши, которые неправильно очищены от очереди событий, являются основной причиной того, что очередь событий заполняется.

Пример. Нарисовать курсор под текущей позицией мыши.

x, y = pygame.mouse.get_pos()
x -= mouse_cursor.get_width()/2
y -= mouse_cursor.get_height()/2
screen.blit(mouse_cursor, (x, y))

Определить какая кнопка была нажата на мышке можно используя значение event.button:

Пример. Перемещать картинку курсором мыши.

Клавиатура

Этот модуль содержит функции для работы с клавиатурой.Очередь событий получает события pygame.KEYDOWN и pygame.KEYUP при нажатии и отпускании клавиш клавиатуры.

Оба события имеют ключевой атрибут, который представляет собой целочисленный идентификатор, представляющий каждую клавишу на клавиатуре.Событие pygame.KEYDOWN имеет дополнительные атрибуты: unicode и scancode. unicode представляет собой одну символьную строку, которая соответствует введённому символу. Scancode представляет собой код для конкретной платформы.

Получить код клавиши:

Существует много клавиатурных констант, они используются для представления клавиш на клавиатуре. Ниже приведен список всех клавиатурных констант:

Направленное движение с помощью клавиш

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

вверх, вниз, влево, вправо.

Создать картинку, например:

Проверить очередь событий:

Проверить, является ли полученное событие нажатием на клавиши со стрелками:

Если - да, то получмить код нажатой клавиши и сформировать новые координаты для картинки:

И нарисовать картинку в новом месте:

Объект Surface

объект pygame для представления изображений

Surface((width, height), flags=0, depth=0, masks=None) -> Surface

Surface((width, height), flags=0, Surface) -> Surface

Наложение поверхностей, прозрачность.

Управление временем

Модуль pygame.time содержит объект Clock, который можно использовать для отслеживания
времени. Чтобы создать объект типа: время, вызывается конструктор pygame.time.Clock:

Когда создан объект clock, можно вызвать его функцию tick один раз за кадр,
которая возвращает время, прошедшее со времени предыдущего вызова в миллисекундах:

Функция tick может использовать необязательный параметр для установления максимальной частоты кадров. Этот параметр нужен, если игра запущена на рабочем компьютере и необходимо контролировать, чтобы она не использовала всю его вычислительная мощность на 100%:

time_passed = clock.tick (30)

Звуки

Для управления звуком исползуется модуль pygame.mixer. Он отвечает за любые действия со звуками.

Загружаем звуковой файл в формате *.wav

sound = pygame.mixer.Sound("sound.wav")
(загружаем до игрового цикла, т.к. это очень долгая операция)

Столкновения (collisions)

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

Создание игр – перспективная и прибыльная сфера разработки приложений, в которой можно заработать много денег. Но это не так просто, поскольку необходимо разбираться в основах игровой механики, а также понимать, что надо для их создания с помощью Python. И с помощью библиотеки Pygame вы получите все необходимые для этого инструменты. Весь код, который будет приведен в этой статье, был написан в Python версии 3.7 и модификации Pygame 1.9.6.

Что такое Pygame?

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

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

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

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

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

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

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

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

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

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

Сначала надо импортировать требуемые компоненты и задать базовые переменные настроек игры.

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

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

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

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

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

Компьютерные экраны состоят из пикселей, каждый из которых содержит 3 элемента: красный, зеленый и синий. Цвет пикселя зависит от того, как горит каждый элемент:

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

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

Итого, получится 16 777 216 цветов.

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

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

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

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

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

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

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

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

Контроль частоты кадров в секунду

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

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

Выводы

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

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

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

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

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

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

pygame.display.set_mode() will close the previous display. If precise control is needed over the pixel format or display resolutions, use the functions pygame.display.mode_ok() , pygame.display.list_modes() , and pygame.display.Info() to query information about the display. --> Pygame может иметь активным только один дисплей в любое время. Создание нового с помощью pygame.display.set_mode() закроет предыдущий дисплей. Если требуется точный контроль над форматом пикселей или разрешением экрана, используйте функции pygame.display.mode_ok() , pygame.display.list_modes() и pygame.display.Info() для запроса информации об отображении.

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

pygame.QUIT is sent when the user has requested the program to shut down. The window will receive pygame.ACTIVEEVENT events as the display gains and loses input focus. If the display is set with the pygame.RESIZABLE flag, pygame.VIDEORESIZE events will be sent when the user adjusts the window dimensions. Hardware displays that draw direct to the screen will get pygame.VIDEOEXPOSE events when portions of the window must be redrawn. --> Когда режим отображения установлен, несколько событий помещаются в очередь событий pygame. pygame.QUIT отправляется, когда пользователь запросил завершение работы программы. Окно будет получать события pygame.ACTIVEEVENT по мере того, как дисплей приобретает и теряет фокус ввода. Если дисплей установлен с pygame.RESIZABLE флагом, pygame.VIDEORESIZE событие будет пересылаться , когда пользователь изменяет размеры окна. Аппаратные дисплеи, которые рисуют прямо на экране, будут получать события pygame.VIDEOEXPOSE , когда части окна должны быть перерисованы.

pygame.WINDOWEVENT that is meant to replace all window related events like pygame.VIDEORESIZE , pygame.VIDEOEXPOSE and pygame.ACTIVEEVENT . --> В pygame 2 есть новый тип события под названием pygame.WINDOWEVENT , который предназначен для замены всех связанных с окном событий, таких как pygame.VIDEORESIZE , pygame.VIDEOEXPOSE и pygame.ACTIVEEVENT .

Обратите внимание,что API WINDOWEVENT считается экспериментальным и может измениться в будущих выпусках.

pygame.WINDOWEVENT have an event attribute that can take the following values. --> Новые события типа pygame.WINDOWEVENT имеют атрибут event который может принимать следующие значения.

WINDOWEVENT_TAKE_FOCUS and WINDOWEVENT_HIT_TEST will not work. See the SDL implementation (in C programming) of the same over here. --> Если используемая версия SDL меньше 2.0.5, два последних значения WINDOWEVENT_TAKE_FOCUS и WINDOWEVENT_HIT_TEST не будут работать. См. Реализацию SDL (в программировании на C) здесь.

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

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

SDL_VIDEODRIVER can be set to control which backend is used. The systems with multiple choices are listed here. --> Pygame выберет один из нескольких внутренних экранных модулей при инициализации. Режим отображения будет выбран в зависимости от платформы и прав текущего пользователя. Перед инициализацией модуля SDL_VIDEODRIVER можно задать переменную среды SDL_VIDEODRIVER для управления используемым сервером . Здесь перечислены системы с множественным выбором.

SDL_WINDOWID must be set to a string containing the window id or handle. The environment variable is checked when the pygame display is initialized. Be aware that there can be many strange side effects when running in an embedded display. --> На некоторых платформах можно встроить отображение pygame в уже существующее окно. Для этого в переменной среды SDL_WINDOWID должна быть установлена ​​строка, содержащая идентификатор окна или дескриптор. Переменная среды проверяется при инициализации отображения pygame. Имейте в виду, что при работе со встроенным дисплеем может возникнуть много странных побочных эффектов.

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

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

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

pygame.display module is currently initialized. --> Возвращает True, если модуль pygame.display в настоящий момент инициализирован.

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

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

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

(0, 0) and pygame uses SDL version 1.2.10 or above, the created Surface will have the same size as the current screen resolution. If only the width or height are set to 0 , the Surface will have the same width or height as the screen resolution. Using a SDL version prior to 1.2.10 will raise an exception. --> Если размер не передан или установлен в (0, 0) и pygame использует SDL версии 1.2.10 или выше, созданная поверхность будет иметь тот же размер, что и текущее разрешение экрана. Если только ширина или высота установлены на 0 , поверхность будет иметь ту же ширину или высоту, что и разрешение экрана. Использование версии SDL до 1.2.10 вызовет исключение.

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

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

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

0 or no flags argument it will default to a software driven window. Here are the display flags you will want to choose from: --> Аргумент flags определяет, какой тип отображения вы хотите. Есть несколько вариантов на выбор, и вы даже можете комбинировать несколько типов с помощью побитового оператора или (вертикальная черта "|"). Если вы передадите 0 или не передадите аргумент флагов, по умолчанию будет запущено программное окно. Вот отображаемые флаги, из которых вы захотите выбрать:

В Pygame 2 доступны следующие дополнительные флаги.

SCALED , SHOWN and HIDDEN --> Новое в Pygame 2.0.0: SCALED , SHOWN и HIDDEN

vsync parameter to 1 , it is possible to get a display with vertical sync, but you are not guaranteed to get one. The request only works at all for calls to set_mode() with the pygame.OPENGL or pygame.SCALED flags set, and is still not guaranteed even with one of those set. What you get depends on the hardware and driver configuration of the system pygame is running on. Here is an example usage of a call to set_mode() that may give you a display with vsync: --> Установив для параметра vsync значение 1 , можно получить отображение с вертикальной синхронизацией, но это не гарантируется. Запрос вообще работает только для вызовов set_mode() с установленными pygame.OPENGL или pygame.SCALED и по-прежнему не гарантируется даже с одним из них. То, что вы получите, зависит от конфигурации оборудования и драйверов системы, на которой работает pygame. Вот пример использования вызова set_mode() который может дать вам отображение с vsync:

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

vsync --> Новое в pygame 2.0.0: vsync

0 means the default display is used. --> Индекс дисплея 0 означает, что используется дисплей по умолчанию.

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

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

pygame.HWSURFACE and pygame.DOUBLEBUF , this will wait for a vertical retrace and swap the surfaces. If you are using a different type of display mode, it will simply update the entire contents of the surface. --> Это обновит содержимое всего дисплея. Если в вашем режиме отображения используются флаги pygame.HWSURFACE и pygame.DOUBLEBUF , это будет ждать вертикального отката и поменять местами поверхности. Если вы используете другой тип режима отображения, он просто обновит все содержимое поверхности.

pygame.OPENGL display mode this will perform a gl buffer swap. --> При использовании pygame.OPENGL отображения pygame.OPENGL выполняется замена буфера gl.

pygame.display.flip() for software displays. It allows only a portion of the screen to updated, instead of the entire area. If no argument is passed it updates the entire Surface area like pygame.display.flip() . --> Эта функция похожа на оптимизированную версию pygame.display.flip() для отображения программного обеспечения. Это позволяет обновлять только часть экрана, а не всю область. Если аргумент не передан, он обновляет всю область Surface, например pygame.display.flip() .

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

pygame.OPENGL displays and will generate an exception. --> Этот вызов нельзя использовать на дисплеях pygame.OPENGL и вызовет исключение.

SDL_VIDEODRIVER flags in pygame.display.set_mode() to see some of the common options. --> Pygame выбирает один из множества доступных экранных модулей при инициализации. Это возвращает внутреннее имя, используемое для серверной части дисплея. Это можно использовать для предоставления ограниченной информации о том, какие возможности отображения могут быть ускорены. См. Флаги SDL_VIDEODRIVER в pygame.display.set_mode() чтобы увидеть некоторые общие параметры.

pygame.display.set_mode() some platforms can provide information about the default display mode. This can also be called after setting the display mode to verify specific display options were satisfied. The VidInfo object has several attributes: --> Создает простой объект, содержащий несколько атрибутов для описания текущей графической среды. Если это вызывается перед pygame.display.set_mode() некоторые платформы могут предоставить информацию о режиме отображения по умолчанию. Это также можно вызвать после установки режима отображения, чтобы убедиться, что определенные параметры отображения удовлетворены. У объекта VidInfo есть несколько атрибутов:

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

Новое в pygame 1.7.1.

-1 means that any requested size should work (this is likely the case for windowed modes). Mode sizes are sorted from biggest to smallest. --> Эта функция возвращает список возможных размеров для указанной глубины цвета. Возвращаемое значение будет пустым списком, если с заданными аргументами нет доступных режимов отображения. Возвращаемое значение -1 означает, что любой запрошенный размер должен работать (это, вероятно, относится к оконным режимам). Размеры режимов отсортированы от наибольшего к наименьшему.

0 , the current/best color depth for the display is used. The flags defaults to pygame.FULLSCREEN , but you may need to add additional flags for specific fullscreen modes. --> Если глубина равна 0 , используется текущая / наилучшая глубина цвета для дисплея. По умолчанию флаги имеют значение pygame.FULLSCREEN , но вам может потребоваться добавить дополнительные флаги для определенных полноэкранных режимов.

0 means the default display is used. --> Индекс дисплея 0 означает, что используется дисплей по умолчанию.

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

pygame.display.set_mode() . It is used to determine if a requested display mode is available. It will return 0 if the display mode cannot be set. Otherwise it will return a pixel depth that best matches the display asked for. --> Эта функция использует те же аргументы, что и pygame.display.set_mode() . Он используется, чтобы определить, доступен ли запрошенный режим отображения. Он вернет 0 , если режим отображения не может быть установлен. В противном случае он вернет глубину пикселей, которая лучше всего соответствует запрашиваемому дисплею.

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

pygame.HWSURFACE , pygame.DOUBLEBUF , and maybe pygame.FULLSCREEN . The function will return 0 if these display flags cannot be set. --> Наиболее полезными флагами для передачи будут pygame.HWSURFACE , pygame.DOUBLEBUF и, возможно, pygame.FULLSCREEN . Функция вернет 0, если эти флаги отображения не могут быть установлены.

0 means the default display is used. --> Индекс дисплея 0 означает, что используется дисплей по умолчанию.

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

pygame.display.set_mode() with the pygame.OPENGL flag, it is a good idea to check the value of any requested OpenGL attributes. See pygame.display.gl_set_attribute() for a list of valid flags. --> После вызова pygame.display.set_mode() с флагом pygame.OPENGL рекомендуется проверить значение любых запрошенных атрибутов OpenGL. См. pygame.display.gl_set_attribute() для получения списка допустимых флагов.

pygame.display.set_mode() with the pygame.OPENGL flag, Pygame automatically handles setting the OpenGL attributes like color and double-buffering. OpenGL offers several other attributes you may want control over. Pass one of these attributes as the flag, and its appropriate value. This must be called before pygame.display.set_mode() . --> При вызове pygame.display.set_mode() с флагом pygame.OPENGL Pygame автоматически устанавливает такие атрибуты OpenGL, как цвет и двойная буферизация. OpenGL предлагает несколько других атрибутов, которыми вы, возможно, захотите управлять. Передайте один из этих атрибутов в качестве флага и его соответствующее значение. Это должно быть pygame.display.set_mode() перед pygame.display.set_mode () .

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

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

GL_MULTISAMPLESAMPLES to a value above 0 to control the amount of anti-aliasing. A typical value is 2 or 3. --> Установите GL_MULTISAMPLESAMPLES на значение выше 0, чтобы контролировать степень сглаживания. Типичное значение - 2 или 3.

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