Pycraft, 3D-видеоигра с открытым исходным кодом и открытым миром, созданная на python с помощью Tkinter, PIL, Pygame, Numpy, ModernGL, ModernGL_window, PyAutoGUI, Psutil, Py-CPUinfo, GPUtil, PyJoyStick и Pyrr

В этой статье, которая выходит примерно раз в месяц, рассказывается, какие изменения были внесены в проект, с какими проблемами мы столкнулись и как мы их преодолели, а также как и где вы можете установить этот проект. Для тех, кому интересно, это будет сопровождать регулярные обновления на моей странице в Твиттере (@PycraftDev в Твиттере: www.twitter.com/PycraftDev), которые теперь также публикуются в моем профиле Dev здесь:https://dev .to/pycraftdev. Эта статья написана Томом Джеббо, ведущим разработчиком и графическим дизайнером, и я надеюсь, что вам понравится как играть в игру, так и читать эту статью!

Содержание

  • PyOpenGL по сравнению с ModernGL, изменения в оболочках игрового движка
  • Новый установщик Pycraft
  • Новости о Pycraft
  • Продолжающийся редизайн Pycraft
  • Заключительные слова
  • Ссылки и кредиты

PyOpenGL против ModernGL

изменение оболочек игрового движка

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

Я хотел бы начать с того, что сказал; мы по-прежнему используем OpenGL API для 3D-графики в Pycraft. И PyOpenGL, и ModernGL связывают проект Python с API на основе C, что позволяет нам использовать OpenGL. Мы рассмотрели это более подробно в нашей предыдущей статье, которую вы можете найти здесь для получения дополнительной информации: https://medium.com/ @PycraftDev/как мы делаем видеоигры на питоне-4-9ec13e333944

Тогда вам может быть интересно, зачем переходить с PyOpenGL на ModernGL, если они делают то же самое? Ну, PyOpenGL, который мы использовали изначально, был очень простой оболочкой для OpenGL, позволяющей нам взаимодействовать с C API, но кроме этого все остальное, что мы, как программисты, работающие с Pycraft, должны добавить, и это отнимает много времени, а также не очень дружелюбный ко всем, кто начинает разработку 3D-игр, мы стремимся сделать этот проект как можно более подробным, но мы не являемся большой командой разработчиков, которая может тратить много времени на сложные программы для создания нашей игры, это также сделало бы программа сложна для понимания и модификации для тех, кто не знаком с OpenGL, а документация по OpenGL и оболочке PyOpenGL не очень подробная или ее легко найти, лучший сайт с документацией по OpenGL, который мы нашли, был https://learnopengl.com/ . Это написано на C, а не на Python, поэтому вам нужно хорошо разбираться в обоих, чтобы действительно понять проект, над которым мы работаем.

Напротив, ModernGL использует те же функции, что и PyOpenGL, и упрощает большую часть из них и делает его гораздо более питоническим (по сути, это означает, что он находится в форме, аналогичной остальной части языка программирования Python), но ModernGL также имеет еще одну выдающуюся особенность, много сложного программирования OpenGL уже сделано за нас, поэтому вместо того, чтобы тратить недели на настройку объекта Vertex Buffer в PyOpenGL, мы можем загрузить объект (или сцену, как это называется в ModernGL) всего в нескольких строках! Это значительно сокращает время, затрачиваемое на программирование, и делает проект более удобным для пользователя даже для новых разработчиков. Вы можете найти документацию проекта здесь: https://moderngl.readthedocs.io/en/latest/, хотя здесь важно отметить, что проект разделен на 2 библиотеки, обе тесно связаны, но второй модуль (ModernGL-окно) позволяет нам создать окно, оптимизированное для рендеринга OpenGL, вы можете найти это здесь: https://moderngl-window.readthedocs.io/en/latest/index.html

У ModernGL также есть еще одно преимущество: его разработчики активно работают над проектом и открыты для отзывов и улучшений, и вы, скорее всего, получите ответ, если разместите здесь вопрос. ModernGL также поставляется с примерами программ, которые отлично работают в нашем опыте без каких-либо настроек, хотя PyOpenGL имеет здесь одно улучшение, PyOpenGL старше, и есть гораздо больше вопросов о переполнении стека, если вам нужна помощь. У обеих библиотек есть свои плюсы и минусы, которые я кратко суммировал на изображении ниже:

Новый установщик Pycraft

Последнее обновление Pycraft, v0.9.4, полностью ориентировано на новый установщик, мы хотели упростить загрузку проекта и всех его дополнительных модулей, это часть того, чтобы сделать проект более удобным для пользователя. Был запланирован установщик для Pycraft еще в первые несколько месяцев разработки, но он никогда не публиковался, потому что это был быстрый прототип, и мы хотели потратить больше времени на то, чтобы установщик выглядел лучше и профессиональнее, а также запустить множество тесты, чтобы убедиться, что новый установщик работает на ряде аппаратных средств. В настоящее время установщик был протестирован только на операционных системах на базе Windows, и в качестве меры предосторожности он не будет работать на Linux, Apple или других операционных системах, поскольку мы не хотим рисковать повреждением.

Инсталлятор состоит из 4 разделов;

  • Утилита установщика завершена (начиная с Pycraft v0.9.4–2 и выше), и при запуске загружает остальную часть Pycraft и его дополнительные файлы, а затем перемещается в указанное пользователем местоположение файла, во время этого процесса выполняется ряд проверок. чтобы убедиться, что все установлено правильно, это изменится в будущих версиях по мере выполнения дополнительной проверки.
  • Утилита удаления также завершена (начиная с Pycraft v0.9.4–4), она позволяет вам настраивать файлы, добавленные установщиком на ваше устройство, здесь вам предоставляется 3 варианта: удалить все, что было загружено, и все сохраненные данные, удалить только Pycraft (сохранив дополнительные файлы, которые могут потребоваться разработчику) и удалить все загруженные, но сохранить сохраненные данные, это будет вызвано в следующем разделе как часть процесса обновления, который находится в центре внимания еще не завершен Pycraft v0.9.4–5. Деинсталлятор очень простой, в настоящее время удаляет все в папках «site-packages» и «pycraft» на вашем ПК (он определяет, где были загружены ваши дополнительные файлы, они хранятся в файле «site-packages» в папке Python), это должно измениться, оставив некоторые файлы, необходимые для Python, например, в следующем обновлении Pycraft (v0.9.4–5).
  • Утилита обновления еще не завершена, хотя тщательно запланирована, она использует основные принципы как деинсталлятора (чтобы удалить предыдущую установку, но сохранить данные сохранения), так и установщика (который автоматически загрузит следующую версию Pycraft), чтобы уменьшить размер файлов. .
  • Наконец, есть утилита восстановления, она не будет завершена как часть остальной части установщика (в Pycraft v0.9.4), но появится в более поздней версии, поскольку мы хотим двигаться вперед, а раздел восстановления является наиболее сложным и вероятно, займет больше всего времени, а пока вы можете связаться с командой Pycraft, оставив комментарий в репозитории здесь: https://github.com/PycraftDeveloper/Pycraft, или связавшись с ведущим разработчиком здесь: https:/ /twitter.com/PycraftDev или отправив сообщение на сервер раздора, который вы можете найти здесь: https://discord.gg/h4jpcjJh (инвайт на сервер)

Это не заменит ни один из обычных способов загрузки проекта с GitHub, SourceForge, Read-The-Docs или PyPi, но будет прикреплен как часть каждой загрузки, если вам понадобится помощь в настройке. Команда PyPi «pip install python-pycraft» по-прежнему будет работать (и фактически используется установщиком), но для загрузки установщика в ReadME будет дана только отдельная ссылка/код загрузки и совет, хотя это произойдет только после доработка всего установщика.

Также важно отметить, что это не влияет на (.exe) пользователей Pycraft, поскольку, к сожалению, их нельзя установить через установщик, но их намного проще настроить.

Новости о Pycraft

Помимо работы над установщиком, также была проделана большая работа в нескольких других аспектах проекта. Первоначально мы использовали модуль «Входы», чтобы получить входные данные контроллера для проекта, он работал нормально, но имел несколько недостатков, он бесконечно прослушивал события и не контролировался проектом, как планировалось, он также был очень ресурсоемким, даже когда он не был включен в настройках, код механизма обнаружения контроллера постоянно заставлял проект использовать более 80% доступной мощности ЦП, что означает, что остальная часть проекта будет сильно ограничена в производительности. Модуль Inputs для Python также устаревает (поэтому маловероятно, что он будет поддерживать новые контроллеры) и имеет несколько проблем с безопасностью; например, кому-то было бы очень легко взять проект и сделать кейлоггер. В результате мы перешли на «PyJoyStick», который является полной противоположностью всему, что я упомянул выше, он быстрее, безопаснее (его нельзя использовать в качестве кейлоггера), гораздо более управляемый и настраиваемый, гораздо лучше по производительности. (при загрузке ЦП примерно от 0,1 до 1%) и является более современным.

Кроме того, мы значительно изменили способ загрузки и воспроизведения музыки в Pycraft. План всегда состоял в том, чтобы иметь другую реализацию для «музыки» и «звука» в Pycraft. Звук предназначен для окружающего шума, такого как чириканье птиц, или коротких звуков, таких как шаги, в текущем решении они полностью загружаются в память перед воспроизведением, это нормально, потому что они маленькие и часто не имеют больших размеров файлов. Напротив, музыка намного больше по размеру файла, и ее будет сложно полностью загрузить в память, когда мы захотим ее использовать, а также это сделает проект очень интенсивным по памяти, поэтому вместо этого мы транслируем музыку из файла, это работает намного лучше и требуются только незначительные изменения в реализации, это изменение было внесено несколько обновлений разработчиков назад и является относительно незначительным, но делает проект снова более производительным. Здесь все еще есть ошибки, и мы исправим их, как только сможем!

Здесь, я думаю, важно отметить, что проект в настоящее время находится в стадии тестирования на множестве различных операционных систем, код написан и в значительной степени предназначен для использования на устройствах на базе Windows, но проект всегда был написан так, чтобы он должна быть совместима с другими операционными системами. В настоящее время активное тестирование проводится в Windows, именно здесь большинство людей будет использовать проект и где большинство ошибок будет быстро выявлено и исправлено, а также в различных дистрибутивах Linux. Однако здесь важно отметить, что утилита установки в настоящее время доступна только для Windows, но позже это изменится для поддержки Linux. Устройства Apple, к сожалению, не будут активно тестироваться и получать поддержку Pycraft, потому что это не ОС, к которой у меня есть легкий доступ, хотя это может измениться, если количество проблем и ошибок, выявленных в Apple, увеличится.

Продолжающийся редизайн Pycraft

Pycraft в последнее время медленно претерпевает изменение дизайна, внося небольшие изменения как в сам проект, так и через свои веб-страницы, игра недавно была немного обновлена, чтобы изменить различия между светлым и темным режимом, поэтому они немного отличаются. , подзаголовок графического интерфейса в светлом режиме немного отличается от обычного цвета шрифта, но мы не можем сделать это в темном режиме, потому что мы хотим сделать контрастность достаточно высокой, чтобы быть доступной для большинства пользователей. Кроме того, в проект были внесены изменения для улучшения совместимости с новыми закругленными углами Windows 11, и способ отображения шрифта теперь отличается как в графическом интерфейсе Credits, так и в Benchmark, это позволяет нам улучшать их, например, легко добавлять дополнительную информацию без необходимости чтобы полностью переделать все строки ниже.

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

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

Заключительные слова

Спасибо, что прочитали эту статью, я надеюсь, что вам понравилась эта статья, и я надеюсь, что вы узнали несколько трюков Pygame и догнали все, что связано с Pycraft. Если вы хотите поделиться этой статьей, мы будем очень благодарны!

Разработка Pycraft занимает у меня много времени, и много работы посвящено Pycraft в целом и написанию этих статей для вас, поэтому, если у вас есть какие-либо вопросы, предложения или помощь, не стесняйтесь обращаться к нам по адресу https: //github.com/PycraftDeveloper/Pycraft, или связавшись с ведущим разработчиком здесь: https://twitter.com/PycraftDev, или разместив сообщение на сервере раздора, который вы можете найти здесь: https:// discord.gg/h4jpcjJh (инвайт на сервер).

Ссылки и кредиты

Моя страница в Твиттере: https://twitter.com/PycraftDev

Моя страница на GitHub: https://github.com/PycraftDeveloper

Моя страница Dev.to: https://dev.to/pycraftdev

Pycraft можно найти здесь: https://github.com/PycraftDeveloper/Pycraft

Pycraft также можно найти здесь: https://pypi.org/project/Python-Pycraft/

Документацию по Pycraft можно найти здесь: https://python-pycraft.readthedocs.io/en/latest/

С благодарностью:

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

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