Как сохранить программу созданную в библиотеке pygame

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

Программа ниже инициализирует Pygame и выводит в консоль значение функции get_extended():

import pygame pygame.init() W, H = 600, 400 sc = pygame.display.

set_mode((600, 400)) pygame.display.set_caption(«Изображения») pygame.display.set_icon(pygame.

image.load(«app.bmp»)) clock = pygame.time.

Clock() FPS = 60 WHITE = (255, 255, 255) RED = (255, 0, 0) YELLOW = (239, 228, 176) print( pygame.image.

get_extended() ) while True: for event in pygame.event.get(): if event.type == pygame.

Pygame — Редактор двумерной карты с сохранением

QUIT: exit() clock.tick(FPS)

Как видите, в данном случае Pygame возвращает 1, значит, можно использовать форматы PNG и JPEG. Теперь загрузим в программе изображение машинки:

car_surf = pygame.image.load(«images/car.bmp»)

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

car_rect = car_surf.get_rect(center=(W//2, H//2)) sc.blit(car_surf, car_rect) pygame.display.update()

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

bg_surf = pygame.image.load(«images/sand.jpg») sc.blit(bg_surf, (0, 0))

Стало лучше, но белый фон у машинки явно выделяется на фоне песка. Давайте укажем Pygame, что белый цвет следует воспринимать как прозрачный:

car_surf.set_colorkey((255, 255, 255))

Теперь намного лучше. Однако, если имеется файл с альфа-каналом (прозрачным фоном), то оно будет сразу отображаться нужным образом:

Читайте также:
Как удалить с компьютера программу аваст

finish_surf = pygame.image.load(«images/finish.png») sc.blit(finish_surf, (0, 0))

Следующий важный момент, особенно при разработке динамических игр, перевод пикселей загруженных изображений в формат пикселей главной поверхности:

car_surf = pygame.image.load(«images/car.bmp»).convert() finish_surf = pygame.image.load(«images/finish.png»).

convert_alpha() bg_surf = pygame.image.load(«images/sand.jpg»).convert()

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

Причем, обратите внимание, изображение в формате PNG с альфа-каналом преобразуется методом convert_alpha(), а не convert(). Вообще, эти строчки равносильны следующей операции:

Программирование игр Pygame #26: Сохранение игры (библиотека shelve)


car_surf = pygame.image.load(«images/car.bmp») car_surf = car_surf.convert()

То есть, методы convert() и convert_alpha() – это методы класса Surface, которые возвращают новую поверхность с измененным представлением пикселей.

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

car_surf2 = car_surf.convert()

то пиксели car_surf2 будут приведены к формату главной поверхности, а пиксели car_surf останутся прежними – без изменений.

Трансформация поверхностей

Предположим, что мы теперь хотели бы уменьшить масштаб изображения фона, чтобы песок был более мелкий. Это можно сделать с помощью модуля pygame.transform содержащий различные функции трансформации поверхностей. Подробное их описание можно посмотреть на странице официальной документации: https://www.pygame.org/docs/ref/transform.html Итак, мы воспользуемся функцией: pygame.transform.scale(Surface, (width, height), DestSurface = None) -> Surface Здесь первый параметр – преобразуемая поверхность; (width, height) – ее новые значения ширины и высоты. В нашей программе вызовем эту функцию так:

bg_surf = pygame.transform.scale(bg_surf, (bg_surf.get_width()//3, bg_surf.

get_height()//3))

Как сохранить окно pygame как изображение? (python3) (PyGame)

Я делаю редактор пикселей / мусорную версию ms paint на python с помощью pygame, и я хочу сохранить окно (холст?) Как png или jpg. Я видел pygame.image.save, но он сохраняет только определенную поверхность в виде изображения, я хочу сохранить все окно.

FluffyFlounder 16 Сен 2020 в 02:39

2 ответа

Лучший ответ

Используйте pygame.image.save (), который требуется PyGame 1.8 или новее. Если вы предоставите ему поверхность окна базового уровня, он действительно сохранит все содержимое окна.

Читайте также:
Для чего в программе эксель создаются диаграммы

pygame.image.save( window, ‘surface.png’ )

Тип изображения определяется суффиксом имени файла.

Kingsley 15 Сен 2020 в 23:45

pygame.image.save(window, «screenshot.png»)

Источник: question-it.com

Используем PyInstaller для создания exe-файла игры на Pygame

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

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

Из множества библиотек, собирающих проекты в exe, выбрал PyInstaller. Его оказалось достаточно, чтобы справиться с задачей. Опишу все пошагово (для Windows).

Установка PyInstaller

В командной строке пишем:

pip install pyinstaller

Создание spec-файла (файла спецификации)

Pyinstaller создает приложение, выполняя содержимое файла спецификации.

Чтобы создать spec-файл, через командную строку в папке с проектом набираем:

pyi-makespec —onefile mygame.py

Флаг —onefile создает файл спецификации, который позволит упаковать всё необходимое в один exe-файл.

Получаем файл mygame.spec

Редактирование spec-файла

Теперь нужно правильно настроить spec-файл. Открываем spec-файл в текстовом редакторе.

block_cipher = None a = Analysis([‘mygame.py’], pathex=[‘C:/Users/1/Desktop/Python/test’], binaries=[], datas=[(‘Images/image.png’, ‘Images’), (‘Music/track.mp3’, ‘Music’), (‘font.ttf’, ‘.’)], hiddenimports=[], hookspath=[], runtime_hooks=[], excludes=[], win_no_prefer_redirects=False, win_private_assemblies=False, cipher=block_cipher) pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher) exe = EXE(pyz, a.scripts, a.binaries, a.zipfiles, a.datas, [], name=’mygame’, debug=False, bootloader_ignore_signals=False, strip=False, upx=True, upx_exclude=[], runtime_tmpdir=None, console=False, icon=’C:/Users/1/Desktop/Python/test/icon.ico’)

В качестве первого атрибута для объекта класса Analysis передается имя py-файла, который нужно скомпилировать.

Атрибут pathex отвечает за путь к папке проекта.

В списке datas указываются файлы, которые нужно загрузить для работы приложения (изображения, музыка/звуки, шрифты). Datas — это список кортежей. Каждый кортеж имеет два элемента строкового типа:

  • Первый — путь до файла, который нужно загрузить.
  • Второй указывает имя папки для хранения файла во время выполнения программы
    (‘.’ — означает, что файл будет помещен во временную папку без подкаталога).
Читайте также:
Как правильно настроить программу flux на русском

Редактирование путей к файлам в коде

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

def resource_path(relative): if hasattr(sys, «_MEIPASS»): return os.path.join(sys._MEIPASS, relative) return os.path.join(relative)

При запуске приложения PyInstaller распаковывает данные во временную папку и сохраняет путь к ней в переменной среды _MEIPASS.

Функция resource_path проверяет создана ли временная папка, и если да, то возвращает путь к ней для дальнейшей загрузки файлов. В противном случае (например, если запустить код через интерпретатор) функция вернет тот путь, который в неё передали (то есть путь к папке проекта с игрой).

Чтобы получить путь к файлу

  • если файл лежит в той же папке, что и py-файл, пишем:

path = resource_path(‘image.png’)

  • если файл вынесен в отдельную папку проекта, пишем:

path = resource_path(os.path.join(‘Folder’, ‘image.png’))

При этом, если файл вынесен в отдельную папку проекта, то и во временной папке нужно создавать соответствующий подкаталог (см. редактирование параметра datas).

Далее загружаем файл:

img = pygame.image.load(path)

С музыкой и шрифтами аналогично.

Создание exe

В командной строке вводим:

pyinstaller mygame.spec

Готово! Exe-файл находится в папке dist.

Замечание про функции quit() и exit()

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

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

Стандартным способом выйти из программы является использование sys.exit().

Источник: habr.com

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru