Различия между игровыми библиотеками Python Pygame и Pyglet?
Вопрос
У меня был некоторый опыт работы с Pygame, но в последнее время вокруг Pyglet, кажется, много шума.
Как эти две библиотеки сравниваются?В чем будет преимущество использования одного перед другим, как по функциям, так и по простоте использования?
Наконец, можете ли вы сказать, что один более Pythonic, чем другой?
Решение
Я рассматривал как Pygame, так и Pyglet для небольшого 2D-шутера, и после просмотра исходного кода и некоторых руководств остановился на Pyglet.Я был очень доволен результатами.
Пиглет заработал сразу, с ним было приятно работать, и концептуально он был очень чистым.Мне это определенно показалось питоническим:вы можете получить простой и читаемый пример, работающий очень быстро, и он эффективно использует декораторы для обработки событий.Это также не навязывало определенную структуру программы, что позволило мне легко добавить физическое моделирование Pymunk (http://code.google.com/p/pymunk/).
Хотя он основан на OpenGL, и вы можете использовать эти функции для создания специальных эффектов, я прекрасно справился, даже не зная о них.
Он также хорошо работает с py2exe и py2app, что важно, поскольку у многих людей не установлен интерпретатор Python.
С другой стороны, в Интернете меньше информации о ней, поскольку она новее, а также меньше примеров игр, на которые можно посмотреть.
Кроме того, он немного изменился из предыдущих версий, поэтому некоторые из учебников, которые сейчас устарели (существует «петля событий нового стиля» и класс Sprite в качестве основных дополнений.)
Я бы порекомендовал скачать примеры (в комплект входит хороший клон Asteroids под названием Astraea) и посмотреть, понравится ли вам этот стиль.
Другие советы
Пигаме:Лицензия LGPL
Пиглет:Лицензия BSD
Pygame сильно зависит от библиотек SDL.
Pyglet — это чистая библиотека Python с меньшим количеством зависимостей, я думаю, она требует лучшего понимания OpenGL.
Pygame существует уже давно, многие его использовали.
Pyglet — новая библиотека
Pygame ориентирован на разработку игр (курсоры, спрайты, поддержка джойстика/геймпада).
Pyglet имеет более общее назначение (хотя у него есть класс Sprite).
Я также нашел это обсуждение в списке рассылки пользователей pyglet: от pygame+pyopengl к пиглету
Отказ от ответственности:Я еще не пользовался, только попробовал несколько уроков ;-)
Pyglet хорош (для 2D-игр), если вы никогда не собираетесь рисовать векторную графику или примитивы внутри самой игры, а просто загружаете изображения с диска.Это также намного чище, потому что нет необходимости писать собственный игровой цикл и беспокоиться о скорости, времени и отзывчивости.
Однако если вам когда-нибудь придется генерировать графику на лету, а затем сохранять ее либо в виде переменной, либо в виде файла, тогда pyglet становится значительно сложнее, потому что вам придется возиться с низкоуровневыми функциями OpenGL.В этих сценариях pygame гораздо более удобен для пользователя благодаря программному рендерингу и классу Surface.Или вы можете использовать библиотеку изображений Python и связать ее с pyglet.
Очевидно, что для 3D-игр вам все равно придется возиться с функциями OpenGL, и в этом случае я рекомендую pyglet вместо pygame + PyOpenGL.
Хочу добавить, что есть быстрая библиотека спрайтов Кролик что может стать хорошим дополнением для Пиглета.
Посмотрев и на pygame, и на pyglet, я обнаружил, что пиглет легче освоить, и смог написать простую игру в стиле прорыва за несколько дней.