28.05.2023
статья
Новые функции! Pygame-ce и SDL 2

Всем привет!

Супер новость!
Позавчера у нас начались летние каникулы! Поэтому новые посты будут выходит часто (не обещаю, потому что в июне я уезжаю на дачу на 2-3 недели)!
Введение
Сегодня я с вами поделюсь двумя очень классными версиями модуля pygame. Приятного чтения!


1) Pygame Community

Эта версия не добавляет сильно много всего, однако она очень крутая. Во-первых, в ней есть размытие поверхностей и размытие по гауссу. Также там есть FRect, в котором можно задавать значения типа float (дробные). Но обо все нововведениях вы можете почитать здесь.
А как же установить эту версию? Вы должны открыть терминал и в нём по очереди написать:

pip uninstall pygame
pip install pygame-ce

Эти две строчки, как вы уже поняли, удаляют старый pygame и устанавливают новый pygame-ce. Но вот в коде вы так же импортируете pygame, поэтому ваши старые проекты на нём всё ещё будут работать.


2) Pygame SDL 2

Ну наконец-то! Наконец-то у меня появилось время рассказать вам об этом! Узнал я об этой функции ещё зимой, но у меня то времени не было, то желания, то знаний. Но теперь всё есть.
Чтобы использовать новые функции SDL2 в коде, вы пишите это:

import pygame._sdl2 as sdl2

Да, изначально разработчик pygame скрыл этот модуль, однако я его нашёл.
В sdl2 есть четыре новых класса и одна функция, которые могут вам пригодиться: Window, Renderer, Image, Texture, messagebox.
Для начала рассмотрим функцию. Она может вызвать у вас окно с сообщением.
Она принимает параметры:

  • title - заголовок
  • message - текст сообщения
  • window - вообще не понятно зачем
  • info - будет ли ваше сообщение с иконкой информации
  • warn - будет ли ваше сообщение с иконкой предупреждения
  • error - будет ли ваше сообщение с иконкой ошибки
  • buttons - кортеж с названиями кнопок
  • return_button - индекс кнопки возврата
  • escape_button - индекс кнопки выхода

Теперь про классы

  • Window - окно
  • Renderer - рендер
  • Image - изображение
  • Texture - текстура

Надеюсь, что всем это понятно.
А теперь подробнее.

  • Window - класс окна. Тоже самое, что и pg.display.set_mode(), только круче. В параметрах можно указать заголовок, размер и позицию на экране. Но для него также нужен рендер
  • Renderer - класс рендера. В нём есть довольно много функций. В его параметрах нужно указать окно.
  • Image - класс изображения. Для создания нужно указать текстуру или другое изображение
  • Texture - класс текстуры. Самый простой способ создания - sdl2.Texture.from_surface(). Эта функция принимает в параметрах рендер и поверхность (Surface).

Применение

Окно

Основные функции:

  • window.destroy() - уничтожение окна
  • window.hide() - спрятать окно (полностью)
  • window.show() - показать окно
  • window.maximize() - показать окно во весь экран
  • window.minimize() - спрятать окно, но оставить его на панели задач.
  • window.set_fullscreen(True) - показать во весь экран (полностью). В параметрах ВСЕГДА пишите True
  • window.set_icon(<поверхность (Surface)>) - устанавливает иконку окну

Переменные:

  • window.resizable = <True или False> - может ли окно менять свой размер
  • window.opacity = <число> - прозрачность окна. По умолч. стоит 1
  • window.borderless = <True или False> - есть ли рамка у окна

Рендер

Основные функции:

  • render.clear() - очистка рендера (то же, что и win.fill(<цвет>), только без цвета)
  • render.present() - обновление рендера (pg.display.update())
  • render.blit(<текстура или изображение>, <координаты или Rect>) - отрисовка чего-либо
  • render.draw_point(), render.draw_line(), render.draw_triangle(), render.draw_quad() - рисование точки, линии, треугольника и четырёхугольника соответственно. Правда, как тут задавать цвет я точно не знаю. Если вы знаете, то напишите в комментариях.

Также тут есть несколько переменных, которые вы также можете использовать:

  • render.draw_color = (<красный>, <зелёный>, <синий>, <прозрачность>) - цвет очистки. По умолч. (255, 255, 255, 255)
  • render.scale = (<множитель>, <множитель>) - размер рендера. По умолч. (1, 1)

Изображение

Основные функции:

  • image.get_rect() - взять Rect

Переменные:

  • image.angle = <число> - поворот изображения. Делает то же, что и pygame.transform.rotate(), только проще и лучше
  • image.alpha = <число> - прозрачность от 1 до 255
  • image.flip_x, image_flip_y - отразить изображение по x, по y

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


А на этом всё. Надеюсь, что вам понравился этот пост и вы поставите лайк.

Всем пока!

Комментарии (1)
Про рисование и render.draw_color немного затупил. На самом деле эта переменная и есть цвет, которым вы рисуете. То есть нужно сначала прописать render.draw_color = <цвет фигуры>, а затем уже render.draw_<фигура>(...)