Skip to content

Releases: LukovDev/PyGDF

PyGDF v1.2-release (stable)

04 Jan 15:09
503047c

Choose a tag to compare

Примечания:

  • Данная версия пока что рассчитана на разработку 2D игр (небольшая 3D поддержка есть, но большинство инструментов не реализовано) и работу только на Windows.
  • В качестве API для отрисовки используется OpenGL (от 3.1 версии включительно)
  • Документация по API ядра отсутствует, но исходный код ядра хорошо прокомментирован и изучить что либо можно прямо там.
  • МОБИЛЬНЫЕ УСТРОЙСТВА В ЭТОЙ ВЕРСИИ НЕ ПОДДЕРЖИВАЮТСЯ!

Не пытайтесь заставить работать фреймворк на UNIX-системах. Для этого надо создать отдельную версию фреймворка или его расширение.

Основные проблемы с работой на других операционных системах (на данный момент):

  • Не работает система сборки.
  • Не работает система установки библиотек.
  • Не работает код для запуска проекта.
  • Не работает поддержка аудио в ядре.
  • Некорректно работает поддержка работы с файлами в ядре.
  • Не скомпилированы компилируемые скрипты Cython для Linux/MacOS.
  • (Возможно есть и другие проблемы о которых я пока что не знаю).

Для начала работы с фреймворком, ознакомьтесь с туториалом на сайте PyGDF (Get-Started) (выберите эту версию фреймворка).

На этом же сайте есть страница с туториалами по разработки игр (возможно, пока что эта страница ещё не существует).

Если нашли баг, напишите мне в Telegram и обязательно укажите тег "@pygdf_bug" в начале сообщения.

Список изменений:

  • Минимальная версия OpenGL для работы GDF-Core, теперь OpenGL 3.1. Если вы попробуете запустить окно на версии ниже, оно не будет создано и будет вызвано исключение о том, что ваша версия OpenGL не подходит.

  • Обновлен список требуемых версий определённых библиотек. Требования обновлены до последних версий библиотек.

  • Теперь вы можете передать в класс FontFile() не просто путь до файла шрифта, а io.BytesIO данные и всё будет работать.

  • В функции окна .set_config() теперь в параметры можно передать None чтобы ничего не устанавливать. Тогда функция будет использовать текущие настройки окна.

  • В классе Animator2D() добавлена новая функция .get_active(), которая возвращает текущее состояние анимации. А именно, проигрывается она или нет.

  • Класс SimpleParticleEffect2D() переименован в ParticleEffect2D() по причине расширения функционала. Слово Simple в названии класса больше не уместно.

  • В класс ParticleEffect2D() добавлено 2 новых параметра: size_exp: float = 1.0 и angle_exp: float = 1.0. Это экспонентционные параметры отвечающие за изменение размера и поворота частицы. Позволяет экспоненциально менять это поведение смещая скорость работы относительно времени жизни частицы.

  • В классе ParticleEffect2D() было изменено несколько параметров: start_size, end_size, start_angle и end_angle. Теперь можно указать начальный и конечный размер частицы случайным, и его поворот. Для размера, надо передать список из двух векторов между которыми случайным образом будет выбран размер частицы. А для случайного поворота, надо передать вектор из двух чисел, между которыми случайным образом будет высчитан начальный и конечный угол. Я также оставил вариант, где можно не передавать список из двух векторов и векторов для случайного определения поворота частицы. То есть всё ещё можно передать начальный и конечный размер в виде обычного вектора, и начальный и конечный поворот в виде float значения.

  • В классе Light2D.LightLayer() теперь используется шейдер для отрисовки света, а не режим смешивания OpenGL как раньше.

  • В класс Light2D.LightLayer() добавлено 2 новых параметра: intensity и mix_level. Первый параметр отвечает за повышение или понижение силы яркости всего света (кроме окружающего ambient), а второй параметр отвечает за смешивание текстуры окружающего света и текстуры освещения. При смешивании этих текстур, получается эффект "дымки" или тумана.

  • В классе генератора текста из шрифта FontGenerator() теперь не обязательно в цвете указывать альфа канал. Если его не указать, автоматически будет использоваться альфа цвет равный 1.0

  • Улучшена работа с 3D текстурами, и исправлена неточность в работе класса 2D текстуры. Добавлены дополнительные тонкие настройки текстуры.

  • В классе Sound() теперь при установке позиции и скорости можно передавать не только vec3, но и vec2.

  • Класс Sound() был переделан. Принцип его работы изменён. Теперь вы можете загружать неограниченное количество звуков в игру (до этого было ограничение в 256 штук), путём использования буфера а не источника звука. Теперь можно воспроизводить звук повторно не останавливая прошлое воспроизведение (то есть теперь можно задать наложение звуков, а не его проигрывание с начала). Это реализовано благодаря стеку звуков.

  • Класс Listener() был переименован в SoundListener() для большей интуитивности.

  • Теперь в SoundListener() при установке позиции, можно передавать не только vec3, но и vec2.

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

  • Классы FindedObject() и ContactPoint() в Physics2D, теперь выводят значения своих параметров, когда вы хотите отобразить их через print()

  • В классе Space() в Physics2D были перенесены встроенные функции-обработчики столкновений на Cython, ускорив тем самым вычисления.

  • Содержание нескольких функций из класса Space() в Physics2D, а именно: .object_query(), .find_near_object() и .find_objects() были перенесены на Cython, тем самым немного ускорив вычисления.

  • Пакетная отрисовка спрайтов больше не имеет параметра camera: Camera2D в конструкторе и в целом. И возможности отсекать спрайты, которые находятся за её полем зрения. Сделано это потому что это не имеет смысла, ибо слишком большая нагрузка на вычисление проверки пересечения. (Возможно, в будущем я верну это и сделаю вычисление пересечения быстрее).

  • Подкорректирован модуль files. В некоторых функциях добавлены уточнения с работой io.BytesIO

  • Изменён класс Music(). Работа с классом теперь схожа с классом Sound(). Теперь при создании класса и в функции .load() можно передать путь до музыкального файла или уже загруженное содержимое. Теперь можно управлять наложением музыки при вызове функции .play(loop: bool = False, overlay: bool = True) также как и в Sound() классе.

  • Изменён класс Image(). Теперь при создании класса или загрузке изображения через .load() можно указать не только путь до файла, но и уже загруженные или созданные данные изображения, по типу io.BytesIO()

  • Изменён класс FontFile(). Теперь можно корректно передавать либо путь до файла шрифта, либо уже загруженные данные шрифта в формате io.BytesIO или другом байтовом формате данных, как при создании экземпляра класса, так и передавать в функцию .load()

  • Теперь в классе окна Window() есть 3 способа закрытия окна.

    • .exit() - Закрывает окно, вызывает функции уничтожения у текстур, звуков, сцен и тд, сразу останавливает выполнение кода.
    • .close() - Закрывает окно только после выполнения функций .update() и .render(), так же вызывает функции уничтожения у ресурсов, но код не останавливает. Он продолжает исполняться с места где была вызвана инициализация окна.
    • .quit() - Закрывает видеосистему PyGame. Равносильно вызову pygame.quit(). Не удаляет ресурсы и не останавливает код.
  • Изменён кадровый буфер FrameBuffer(). Теперь там есть функция .resize(width: int, height: int) для изменения размера кадрового буфера. Теперь не надо пересоздавать текстуру. Мы просто её перезаписываем.

  • Изменён класс Renderer2D(). Теперь в функции .resize() мы не пересоздаём текстуру каждый раз, а используем функцию .resize() из кадрового буфера.

  • Правки с вызовами gl.glEnable/Disable(gl.GL_TEXTURE_2D). Были убраны лишние вызовы.

  • Переход класса ImGUI() с pyimgui[pygame] на imgui_bundle. Благодаря своему классу рендеринга на основе PygameRenderer() (из pyimgui) и SDL2Renderer() (из imgui_bundle) удалось заставить работать imgui_bundle на pygame в связке с pyopengl. Другими словами, интерфейс теперь более новый с дополнительными возможностями. Из минусов: Немного другой API. Придётся учиться писать интерфейс под новый API. У imgui_bundle документации как таковой нет, и учиться придётся на примерах.

  • В класс ImGUI() добавлена новая функция .set_font(file_path: str, font_size: int = 14, smooth: bool = False) для установки шрифта интерфейса. Если передать путь до шрифта, установится ваш шрифт. Если передать вместо пути тип данных None, то шрифт сбросится на шрифт по умолчанию.

  • Прочие мелкие изменения кода.

Список исправления ошибок:

  • В классе ParticleEffect2D() была исправлена проблема с использованием параметров. До этого, параметры были независимы от размерности пространства (единицы измерения относительно пикселя). Система частиц всегда работала как в единичной системе координат, так и в пиксельной системе координат одинаково. Теперь, когда вы используете пиксельную систему координат (1 метр = 100 пикселей), вам также надо подстраивать ваш эффект частиц увеличивая значения параметров.

  • В классе Utils2D() в функции .get_angle_points() исправлена проблема связанная со смещением угла на 90 градусов. GDF использует систему вращения по часовой стрелке, начиная сверху а не справа и против часовой стрелки как это происходит в других библиотеках и программах.

  • В классе Sprite2D() исправлена проблема связанная с тем, что когда пытаешься отрисовать спрайт размером с 0 пикселей, он остаётся быть...

Read more

PyGDF v1.1-release (stable)

02 Nov 13:37
2c927b1

Choose a tag to compare

Примечания:

  • Данная версия пока что рассчитана на разработку 2D игр (небольшая 3D поддержка есть, но большинство инструментов не реализовано) и работу только на Windows.
  • В качестве API для отрисовки используется OpenGL (от 3.3 версии)
  • Документация по API ядра отсутствует, но исходный код ядра хорошо прокомментирован, и изучить что либо можно прямо там.
  • МОБИЛЬНЫЕ УСТРОЙСТВА В ЭТОЙ ВЕРСИИ НЕ ПОДДЕРЖИВАЮТСЯ!

Не пытайтесь заставить работать фреймворк на UNIX-системах. Для этого надо создать отдельную версию фреймворка или его расширение.

Основные проблемы с работой на других операционных системах (на данный момент):

  • Не работает система сборки.
  • Не работает система установки библиотек.
  • Не работает код для запуска проекта.
  • Не работает поддержка аудио в ядре.
  • Некорректно работает поддержка работы с файлами в ядре.
  • Не скомпилированы компилируемые скрипты Cython для Linux/MacOS.
  • (Возможно есть и другие проблемы о которых я пока что не знаю).

Для начала работы с фреймворком, ознакомьтесь с туториалом на сайте PyGDF (Get-Started) (выберите эту версию фреймворка).

На этом же сайте есть страница с туториалами по разработки игр (возможно, пока что эта страница ещё не существует).

Если нашли баг, напишите мне в Telegram и обязательно укажите тег "@pygdf_bug" в начале сообщения.

Список исправления ошибок:

  • Исправлена ошибка при которой когда вы используете звуки в своей игре и закрываете окно, выводится ошибка OpenAL о том, что ядро повторно закрывает контекст OpenAL.

  • Исправлена ошибка в классе SimpleParticleEffect2D(), где при создании системы частиц, когда передаёте конечный угол поворота в виде целого числа, ничего не происходит. Теперь можно передать как целое число, так и с плавающей точкой.

  • Исправлена серьёзная ошибка в коде отрисовки повёрнутых 2D спрайтов. Функция вращения вершин спрайта на Cython принимала ширину и высоту спрайта в виде целых чисел, что округляло его размеры тем самым создавая "рывки" при плавном его масштабировании.

  • Исправлена ошибка в работе с файлами (files), а именно при создании архива.

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

    • Исправлена проблема с добавлением создающегося архива самого в себя. Цикличное добавление себя в себя приводило к бесконечному циклу и к квадратичному возрастанию размера архива. Исправлено благодаря исключению себя из списка файлов для добавления в архив.

  • Мелкие корректировки кода и исправления ошибок не попавшие в этот список изменений.

Список изменений:

  • Ускорение функции .render() в классе SpriteBatch2D (и в AtlasTextureBatch2D) примерно в ~52.78% (~55.9% по FPS).

  • Добавлена новая функция .close() в класс окна. Нет никаких отличий от функции .exit(). Это просто её альтернатива для удобства (кому как).

  • Изменены классы Sound() и FontFile(). Теперь указать путь до файла можно как при создании класса, так и при загрузке файла через функцию .load()

  • В 2D системе частиц (SimpleParticleEffect2D()) в функции .render() теперь можно указать другую пакетную отрисовку. Раньше при создании системы частиц, создавалась своя пакетная отрисовка, но теперь в функции отрисовки её можно изменить на свою.

  • В звуковом окружении SoundEnvironment() был добавлен параметр .volume который домножает громкость звука с этим параметром устанавливая общую громкость. Полезно чтобы в игре регулировать громкость звуков разом.

  • В классе шейдерной программы ShaderProgram() в функциях .set_sampler 2d и 3d теперь происходит проверка и на тип текстуры. Раньше надо было передавать int-индекс текстуры, но теперь можно передавать как int, так и сам класс Texture или Texture3D.

  • В классе слоя 2D освещения (Light2D.LightLayer()) теперь для всех спрайтовых источников света отрисовываемых пакетной отрисовкой (в случае если вы вручную не укажите цвет спрайта источника света) в функции .render() можно передать список из 3 или 4 элементов цвета (с альфой и без) и установить для них один общий цвет.

  • В классе окна при смене сцены на None (встроенная сцена), вызывается функция .resize() у класса окна, чтобы применить возможные изменения размера окна. Мы не можем повторно вызвать функцию .start() в классе окна по сравнению с классом сцены Scene, по этому мы должны вызвать .resize() функцию у класса окна чтобы изменить данные размера окна у уже созданных объектов с возможно не актуальными значениями размера окна.

  • В работе с файлами в функции .load_file() можно передать io.BytesIO данные и функция вернёт из них строку.

  • Изменён конструктор в классе Texture. Теперь при инициализации экземпляра этого класса, в параметрах можно передать тип текстуры (текстура глубины, цвета, нормалей и тд.), а также какой тип данных в её пикселях используется.

  • Изменён класс FrameBuffer(). Теперь можно привязывать разные текстуры к фреймбуферу помимо основной цветовой текстуры. Например, текстура глубины, нормалей, отражений и тд. Делается это через функцию .attach_texture() в которую надо передать индекс текстуры и тип прикрепления. То бишь какую роль будет играть эта текстура (как она будет использоваться).

  • Изменён класс SimpleParticleEffect2D(). Добавлены 4 подкласса - SpawnInPoint(), SpawnInCircle(), SpawnInSquare() и SpawnInLine(). Эти подклассы являются генераторами позиции и направления частиц. С помощью них можно указать как будут создаваться частицы. В конструкторе SimpleParticleEffect2D() теперь можно изменить параметр создания частиц (SpawnInPoint() по умолчанию) на другой класс, чтобы изменить алгоритм создания частиц. Вы также можете динамически изменить класс изменив параметр .spawn_in установив значение в другой класс спавнера.

    Примеры измененного спавнера частиц:


    SpawnInPoint()

    SpawnInCircle()

    SpawnInSquare()

    SpawnInLine()
  • Мелкие корректировки кода и исправления ошибок не попавшие в этот список изменений.


К этому релизу приложены 2 файла:

  • PyGDF-Framework-v1.1-release.zip - Это шаблонный проект для разработки игр и программ.
    Просто разархивируйте и получите папку с уже готовой начинкой проекта и модулем gdf с исходным кодом ядра.

  • gdf-1.1-cp311-cp311-win_amd64.whl - Это библиотека pip которую можно установить у себя на пк.
    Благодаря ей, можно не использовать ядро с его исходным кодом у себя в проекте.
    Установить эту библиотеку можно консольной командой (убедитесь что консоль открыта в той же директории, где и находится этот файл!):
    pip install gdf-1.1-cp311-cp311-win_amd64.whl
    Импортировать в коде можно будет как обычную библиотеку: import gdf / from gdf import *

Ссылки:

Телеграм
PyGDF
PyGDF-Get-Started

PyGDF v1.0-release (not stable)

09 Oct 21:36
8eec958

Choose a tag to compare

Примечания:

  • Самая ранняя (вроде как стабильная) версия ядра и фреймворка в целом.
  • Данная версия пока что рассчитана на разработку 2D игр (небольшая 3D поддержка есть, но большинство инструментов не реализовано) и работу только на Windows.
  • В качестве API для отрисовки используется OpenGL (от 3.3 версии)
  • Документация по API ядра отсутствует, но исходный код ядра хорошо прокомментирован, и изучить что либо можно прямо там.
  • МОБИЛЬНЫЕ УСТРОЙСТВА В ЭТОЙ ВЕРСИИ НЕ ПОДДЕРЖИВАЮТСЯ!

Не пытайтесь заставить работать фреймворк на UNIX-системах. Для этого надо создать отдельную версию фреймворка или его расширение.

Основные проблемы:

  • Не работает система сборки.
  • Не работает система установки библиотек.
  • Не работает код для запуска проекта.
  • Не работает поддержка аудио в ядре.
  • Некорректно работает поддержка работы с файлами в ядре.
  • Не скомпилированы компилируемые скрипты Cython для Linux/MacOS.
  • (Возможно есть и другие проблемы о которых я пока что не знаю).

В этой версии реализовано всё то, что я хотел реализовать. Каждый модуль и скрипт был протестирован, но 100% гарантию работы именно на вашем устройстве гарантировать я не могу из за отсутствия команды тестировщиков. 99% всех марок и багов в ядре в этой версии исправлено.

Для начала работы с фреймворком, ознакомьтесь с туториалом на сайте PyGDF (Get-Started) (выберите эту версию фреймворка).

На этом же сайте есть страница с туториалами по разработки игр (возможно, пока что эта страница ещё не существует).

Если нашли баг, напишите мне в Telegram и обязательно укажите тег "@pygdf_bug" в начале сообщения.

Всё то, что я хотел реализовать в PyGDF 1.0:

  • Реализовать конвейер рендеринга.

  • Сделать 2D аниматора для покадровой анимации.

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

  • Переделать utils.py. В частности, название и назначение функций.

  • Сделать простую поддержку Discord Rich Presence. Реализовано в utils.py

  • Сделать простую поддержку PyImGUI[pygame].

  • Исправить баги в эффекте системы частиц 2D.

  • Сделать чтобы у окна можно было убрать заголовок (функция set_titlebar(True/False) -> None)

  • Сделать поддержку игровых сцен.

  • Вывести все функции отвечающие за ввод данных в отдельный класс-обработчик input.InputHandler(Window)

  • Сделать 2D освещение:

    • Сделать точечный источник света:
      • Спрайтовый источник света.
      • Шейдерный источник света.
  • Улучшить работу Font.

    • Переделать в другой класс - FontGenerator и обновить старый код.
  • Сделать поддержку Net:

    • Сделать минимальный API для работы сетевого соединения (Сделать реализацию TCP/IP протокола).
    • Сделать простую реализацию Host / Client для того, чтобы вы могли сделать сетевую игру.
  • Переписать 2D физику:

    • Сделать чтобы создавалась сетка коллизии из текстуры (Physics2D.MeshGenerator()).
    • Сделать поиск ближайшего объекта в радиусе, и поиск всех объектов, попадающих под радиус.
    • Исправить разные мелкие недочёты и ошибки в реализации.
    • Вообще переделать весь API 2D физического движка.

К этому релизу приложены 2 файла:

  • PyGDF-Framework.zip - Это шаблонный проект для разработки игр и программ.
    Просто разархивируйте и получите папку с уже готовой начинкой проекта.

  • gdf-1.0-cp311-cp311-win_amd64.whl - Это библиотека pip которую можно установить у себя на пк.
    Благодаря ей, можно не использовать ядро с его исходным кодом у себя в проекте.
    Это тоже самое если бы вы использовали библиотеку pypi.
    Установить эту библиотеку можно консольной командой (убедитесь что консоль открыта в той же директории, где и находится этот файл!):
    pip install gdf-1.0-cp311-cp311-win_amd64.whl

    Импортировать в коде можно будет так:

    import gdf
    from gdf.graphics import Window
    from gdf.net import *
    # и тд ...

Ссылки:

Телеграм
PyGDF
PyGDF-Get-Started