Как сделать камеру pygame

Обновлено: 08.07.2024

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

функция

  • pygame.display.init () - Инициализирует модуль дисплея
  • pygame.display.quit () - Завершить отображение модуля
  • pygame.display.get_init () - Если дисплейный модуль был инициализирован, вернуть True
  • pygame.display.set_mode () - Инициализирует окно или экран для отображения
  • pygame.display.get_surface () - Получить текущий отображаемый объект Surface
  • pygame.display.flip () - Обновляет весь объект Surface для отображения на экране
  • pygame.display.update () - Обновляет часть отображения интерфейса программного обеспечения
  • pygame.display.get_driver () - Получить имя серверной части дисплея Pygame
  • pygame.display.Info () - Создать информационный объект об интерфейсе дисплея
  • pygame.display.get_wm_info () - Получить информацию о текущей оконной системе
  • pygame.display.list_modes () - получает разрешение, которое можно использовать в полноэкранном режиме
  • pygame.display.mode_ok () - Выбрать наиболее подходящую глубину цвета для режима отображения
  • pygame.display.gl_get_attribute () - Получить значение атрибута текущего интерфейса отображения OpenGL
  • pygame.display.gl_set_attribute () - Установить значение атрибута OpenGL для текущего режима отображения
  • pygame.display.get_active () - возвращает True, когда текущий интерфейс дисплея отображается на экране
  • pygame.display.iconify () - Свернуть отображаемый объект Surface
  • pygame.display.toggle_fullscreen () - переключение между полноэкранным и оконным режимами
  • pygame.display.set_gamma () - Изменяет гамма-рампу, отображаемую оборудованием
  • pygame.display.set_gamma_ramp () - настраивает и изменяет гамма-рампу, отображаемую оборудованием
  • pygame.display.set_icon () - Изменить значок окна отображения
  • pygame.display.set_caption() — Set the current window caption
  • pygame.display.get_caption() — Get the current window caption
  • pygame.display.set_palette() — Set the display color palette for indexed displays

Этот модуль предоставляет различные функции для управления интерфейсом отображения Pygame (display). Pygame's Surface Объект может отображаться в виде окна или в полноэкранном режиме. Когда вы создаете и отображаете обычный Surface После объекта изменения на объекте не будут немедленно отражены на видимом экране.Вы должны выбрать функцию переворота, чтобы отобразить измененный экран.

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

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

Pygame допускает только один интерфейс отображения в любое время. Новый интерфейс отображения, созданный с помощью pygame.display.set_mode (), автоматически заменит старый. Если вам нужно точно контролировать формат пикселей или разрешение экрана, используйте pygame.display.mode_ok (), pygame.display.list_modes () и pygame.display.Info () для запроса информации об интерфейсе дисплея.

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

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

Описание функции

pygame.display.init()

Инициализируйте модуль дисплея.

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

После инициализации Pygame автоматически выберет один из нескольких внутренних модулей отображения. Режим отображения определяется платформой и текущими полномочиями пользователя. Перед инициализацией модуля отображения можно использовать переменную среды SDL_VIDEODRIVER, чтобы установить, какой серверный модуль отображения будет использоваться. К системам с несколькими серверными модулями отображения относятся следующие:

Windows : windib, directx
Unix : x11, dga, fbcon, directfb, ggi, vgl, svgalib, aalib

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

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

pygame.display.quit()

Закройте модуль дисплея.

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

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

pygame.display.get_init()

Если модуль дисплея был инициализирован, верните True.

Если модуль дисплея был инициализирован, верните True.

pygame.display.set_mode()

Инициализируйте окно или экран для отображения.

set_mode(resolution=(0,0), flags=0, depth=0) -> Surface

Эта функция создаст Surface Интерфейс отображения объекта. Переданные параметры используются для определения типа отображения. Окончательный созданный интерфейс дисплея будет максимально соответствовать текущей операционной системе.

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

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

Если параметр разрешения не передан или используется настройка по умолчанию (0, 0), а Pygame использует SDL1.2.10 или новее, созданный объект Surface будет иметь то же разрешение, что и текущий пользователь экрана. Если только одна из ширины или высоты установлена ​​на 0, то объект Surface заменит ее шириной или высотой разрешения экрана. Если версия SDL ниже 1.2.10, будет создано исключение.

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

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

Параметр flags определяет желаемый тип отображения. Вам предлагается несколько вариантов. Вы можете использовать несколько типов одновременно с помощью битовых операций (оператор вертикальной черты "|"). Если вы передадите параметр 0 или без флагов, по умолчанию будет использоваться окно программного драйвера. Вот несколько вариантов, предоставляемых параметром flags:

Параметры

смысл

pygame.display.get_surface()

Получить текущий отображаемый Поверхностный объект.

Вернуть текущий отображаемый Surface Объект. Если режим отображения не установлен, возвращается значение None.

pygame.display.flip()

Обновите все для отображения Поверхность объекта на экране.

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

При использовании режима отображения pygame.OPENGL (с использованием рендеринга OPENGL) будет создана область переключения буфера gl.

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

pygame.display.update()

Обновите часть отображения интерфейса программного обеспечения.

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

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

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

pygame.display.get_driver()

Получите имя серверной части дисплея Pygame.

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

pygame.display.Info()

Создайте информационные объекты об интерфейсе дисплея.

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

Возвращенный объект VideoInfo содержит следующие свойства:

Атрибуты

смысл

pygame.display.get_wm_info()

Получить информацию о текущей оконной системе.

Pygame 1.7.1 добавлен недавно.

pygame.display.list_modes()

Получите разрешение, которое можно использовать в полноэкранном режиме.

list_modes(depth=0, flags=pygame.FULLSCREEN) -> list

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

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

pygame.display.mode_ok()

Выберите наиболее подходящую глубину цвета для режима отображения.

mode_ok(size, flags=0, depth=0) -> depth

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

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

Наиболее полезными параметрами флагов являются pygame.HWSURFACE, pygame.DOUBLEBUF и pygame.FULLSCREEN. Если эти флаги не поддерживаются, функция возвращает 0.

pygame.display.gl_get_attribute()

Получить значение атрибута текущего интерфейса дисплея OpenGL.

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

pygame.display.gl_set_attribute()

Установите значение атрибута OpenGL для текущего режима отображения.

gl_set_attribute(flag, value) -> None

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

Эти флаги OPENGL:

GL_ALPHA_SIZE, GL_DEPTH_SIZE, GL_STENCIL_SIZE, GL_ACCUM_RED_SIZE,
GL_ACCUM_GREEN_SIZE, GL_ACCUM_BLUE_SIZE, GL_ACCUM_ALPHA_SIZE,
GL_MULTISAMPLEBUFFERS, GL_MULTISAMPLESAMPLES, GL_STEREO

pygame.display.get_active()

Верните True, когда на экране отображается текущий интерфейс дисплея.

После вызова функции pygame.display.set_mode () на экране отобразится объект Surface. Большинство окон поддерживают скрытие, если отображается Surface Объект скрыт и свернут, тогда функция вернет False.

pygame.display.iconify()

Сверните отображаемое Surface Объект.

Сверните или скройте отображаемый объект Surface. Не все операционные системы поддерживают интерфейс минимизированного дисплея. Если функция успешно вызвана, она возвращает True.

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

pygame.display.toggle_fullscreen()

Переключение между полноэкранным и оконным режимами.

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

pygame.display.set_gamma()

Измените гамма-рампу, отображаемую оборудованием.

set_gamma(red, green=None, blue=None) -> bool

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

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

pygame.display.set_gamma_ramp()

Настроить и изменить гамма-рампу, отображаемую оборудованием

set_gamma_ramp(red, green, blue) -> bool

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

pygame.display.set_icon()

Измените значок окна дисплея.

Установите значок при открытии окна дисплея. Все операционные системы по умолчанию используют простой ЛОГОТИП Pygame в виде значка.

Вы можете пройти в любой Surface Объект используется как значок, но для большинства операционных систем требуется, чтобы размер значка был 32 * 32. Значок может установить прозрачность цвета.

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

pygame.display.set_caption()

Установите строку заголовка текущего окна.

set_caption(title, icontitle=None) -> None

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

pygame.display.get_caption()

Получить строку заголовка текущего окна.

get_caption() -> (title, icontitle)

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

pygame.display.set_palette()

Установите палитру интерфейса дисплея.

Интеллектуальная рекомендация

UIWebView-OC и взаимодействие JS

1. Перехватить указанный URL-адрес в прокси-методе webView. 2. По перехваченному URL-адресу определите специальное поле, указанное в URL-адресе, для обработки соответствующего события. 3. Передайте ис.

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

Мы с вами уже знакомы с методом получения всех произошедших событий - pygame.event.get() , который возвращает события, произошедшие с последнего обращения.

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

Рассмотрим взаимодействие с событиями на примере небольшой программы, в которой по нажатию клавиш показывается квадрат:

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


Методы работы с 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 для обработки очереди событий

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 для работы с мышью

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 . Движение мыши разбито на небольшие и точные события движения. По мере перемещения мыши многие события движения будут помещены в очередь. События движения мыши, которые неправильно очищены от очереди событий, являются основной причиной того, что очередь событий заполняется.

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

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

Координаты курсора при нажатии кнопки мыши находятся в event.pos .

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

Клавиатура

Модуль pygame.key

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

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

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


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

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

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

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

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

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

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

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

Объект Surface

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


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

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

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

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

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

time_passed = clock.tick (30)

Звуки

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

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

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

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

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

Продолжаем создание игры с Pygame и Python

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

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

В первую очередь нам понадобится создать класс с названием GameObject, который будет инкапсулировать некоторое общее поведение и данные для всех других игровых объектов. Классы, представляющие определенные объекты (например, космический корабль), наследуют от него и расширяют его своим собственным поведением и данными.

Класс GameObject будет хранить следующие данные:

position (положение): Точка в центре объекта на 2D-экране

sprite (спрайт): изображение, используемое для отображения объекта

radius (радиус): значение, представляющее зону столкновения вокруг положения объекта

velocity (скорость): Значение, используемое для движения

Вот графическое представление игрового объекта:

Изображение

Спрайтом будет поверхность, загруженная load_sprite() из предыдущих примеров. Радиус-это целое число, указывающее количество пикселей от центра объекта до края зоны столкновения. Однако для самого положения и скорости потребуется новый тип: вектор.

Векторы похожи на кортежи. В 2D - мире (например, в вашей игре) векторы представлены двумя значениями, указывающими координаты x и y. Эти координаты могут указывать на положение, но они также могут представлять движение или ускорение в заданном направлении. Векторы можно добавлять, вычитать или даже умножать, чтобы быстро обновить положение спрайта. Вы можете прочитать больше о векторах в Векторах в 2-мерном пространстве.

Из-за того, насколько полезны векторы в играх, у Pygame уже есть класс для них: Vector2 в модуле pygame.math. Он предлагает некоторые дополнительные функции, такие как вычисление расстояния между векторами и добавление или вычитание векторов. Эти функции значительно облегчат реализацию вашей игровой логики.

В каталоге space_rocks создайте новый файл с именем models.py. На данный момент он будет хранить класс GameObject, но позже мы добавим классы для астероидов, пуль и космического корабля. Файл должен выглядеть следующим образом:


from pygame.math import Vector2

class GameObject:
def __init__(self, position, sprite, velocity):
self.position = Vector2(position)
self.sprite = sprite
self.radius = sprite.get_width() / 2
self.velocity = Vector2(velocity)

def draw(self, surface):
blit_position = self.position - Vector2(self.radius)
surface.blit(self.sprite, blit_position)

def move(self):
self.position = self.position + self.velocity

def collides_with(self, other_obj):
distance = self.position.distance_to(other_obj.position)
return distance

Первая строка импортирует класс Vector2.

В строке class GameObject создается класс GameObject, который вы будете использовать для представления всех игровых объектов в игре.

Строка def init() конструктор класса GameObject. Для этого нужны три аргумента:

position: Центр объекта

sprite: изображение, используемое для рисования этого объекта

velocity: обновляет положение объекта в каждом кадре

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

В строке self.radius радиус вычисляется как половина ширины изображения спрайта. В этой программе спрайты игровых объектов всегда будут квадратами с прозрачным фоном. Вы также можете использовать высоту изображения—это не будет иметь никакого значения.

Функция draw(), которая будет рисовать спрайт объекта на поверхности, переданной в качестве аргумента.

Строка blit_position вычисляет правильное положение для размытия изображения. Этот процесс более подробно описан ниже. Обратите внимание, что конструктор Vector2() получает одно число вместо кортежа. В этом случае он будет использовать это число для обоих значений. Таким образом, Vector2(self.radius) является эквивалентом Vector2((self.radius, self.radius)).

Добавим космический корабль. Для чего скопируем изображение космического корабля в assets/sprites:

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

game_project/
|
+-- space_rocks/
+-- __main__.py
+-- game.py
+-- models.py
L-- utils.py
|_
assets/
|
L-- sprites/
L-- space.jpg
|_ spaceship.jpg

Теперь изменим space_rocks/game.py файл:

from models import GameObject
from utils import load_sprite

class SpaceRocks:
def __init__(self):
self._init_pygame()
self.screen = pygame.display.set_mode((800, 600))
self.background = load_sprite("space", False)
self.spaceship = GameObject(
(400, 300), load_sprite("spaceship"), (0, 0)
)

def _process_game_logic(self):
self.spaceship.move()

def _draw(self):
self.screen.blit(self.background, (0, 0))
self.spaceship.draw(self.screen)
pygame.display.flip()

Объект помещаются в середине экрана, используя координаты (400, 300). Положение будет обновляться каждый кадр с помощью _process_game_logic(), и он будет нарисован с помощью _draw().

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

Изображение

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


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

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

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

Она выглядит вот так:

Комментарии ( 0 ):

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

Python предоставляет встроенную библиотеку под названием pygame, которая использовалась для разработки игр. Как только мы поймем базовые концепции языка программирования, мы сможем разработать игру на Python с библиотекой Pygame с привлекательной графикой, подходящей анимацией и звуком.

Pygame – это кроссплатформенная библиотека, которая используется для разработки видеоигр. Она включает компьютерную графику и звуковые библиотеки. Она разработана Питом Шиннерсом для замены PySDL.

Установка Pygame

Откройте терминал командной строки и введите следующую команду, чтобы установить pygame.

Простой пример Pygame

Вот следующий пример создания простого окна pygame.

Как разработать игру на Python

Вся графика будет отображаться в окне pygame.

Давайте разберемся с основным синтаксисом вышеуказанной программы.

import pygame – это модуль, который позволяет нам работать со всеми функциями pygame.

pygame.init() – используется для инициализации всех необходимых модулей pygame.

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

pygame.QUIT – используется для закрытия события, когда мы нажимаем крестик в углу окна.

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

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

Давайте разберемся со следующим примером рисования фигуры на экране.

Рисование фигуры на экране

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

Пример – разработка игры Snake с использованием Pygame

Выход разработки игры Snake

Мы можем играть снова, нажав кнопку ОК. Мы можем увидеть наш результат в терминале Pycharm(мы использовали Pycharm IDE; вы можете использовать любую Python IDE).

Код игры

Скопируйте приведенный выше код и вставьте его в свою среду IDE и получайте удовольствие. Чтобы понять концепции Pygame, посетите наш полный учебник по Pygame.

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