Różnice między Pythonowymi bibliotekami gier Pygame i Pyglet?

Miałem pewne doświadczenie z Pygame, ale wydaje się być dużo szumu wokół Pyglet ostatnio.

Jak te dwie biblioteki się porównują? Jaka byłaby korzyść z używania jednego nad drugim, zarówno pod względem funkcji, jak i łatwości obsługi?

Wreszcie, czy można powiedzieć, że jeden jest bardziej Pythonic niż drugi?

Author: Martin v. Löwis, 2008-12-16

5 answers

Rozważałem zarówno Pygame, jak i Pyglet dla małej strzelanki 2D i po przejrzeniu kodu źródłowego i kilku tutoriali poszedłem z Pygletem. Byłem bardzo zadowolony z wyników.

Pyglet pracował od razu i był przyjemny w pracy, a koncepcyjnie bardzo czysty. Z pewnością miał dla mnie Pythoniczne wrażenie: można uzyskać prosty i czytelny przykład bardzo szybko, a do obsługi zdarzeń używa dekoratorów. Nie wymusiła też konkretnej struktury programu, co ułatwiło mi mieszanie się w fizycznym modelowaniu Pymunk ( http://code.google.com/p/pymunk/).

Chociaż jest oparty na OpenGL i można używać tych funkcji do efektów specjalnych, byłem w stanie zrobić dobrze bez żadnej wiedzy o nich.

Działa również dobrze z py2exe i py2app, co jest ważne, ponieważ wiele osób nie ma zainstalowanego interpretera Pythona.

Na minusie jest mniej informacji na jego temat w sieci, ponieważ jest nowsze, a także mniej przykładowych gier do obejrzenia.

Również, to zmieniło się nieco w stosunku do poprzednich wersji, więc niektóre z samouczków, które są tam są teraz nieaktualne (jest " new style event loop" i klasy Sprite jako główne dodatki.)

Polecam ściągnąć przykłady (w zestawie jest ładny Klon Planetoid o nazwie Astraea) i sprawdzić, czy podoba Ci się styl.

 25
Author: Kiv,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-12-29 02:40:06

Pygame: licencja LGPL

Pyglet: licencja BSD

Pygame w dużym stopniu opiera się na bibliotekach SDL

Pyglet jest czystą biblioteką Pythona z mniejszą ilością zależności, myślę, że wymaga lepszego zrozumienia OpenGL

Pygame jest tutaj od dawna, Wiele osób go używało

Pyglet to nowa lib

Pygame jest nastawiona na rozwój gier (Kursory, sprite ' y, joystick/gamepad wsparcie)

Pyglet jest bardziej uniwersalny (choć ma klasę Sprite)

Znalazłem również tę dyskusję na liście dyskusyjnej pyglet-users: z pygame+pyopengl do pyglet

Disclaimer: ja też jeszcze nie korzystałem, tylko próbowałem kilku tutoriali; -)

 28
Author: sastanin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-20 03:35:45

Pyglet jest dobry (do gier 2D) , jeśli nigdy nie zamierzasz rysować grafiki wektorowej lub prymitywów w samej grze, i po prostu trzymaj się ładowania obrazów z dysku. Jest to również dużo czystsze, ponieważ nie ma potrzeby pisania własnej pętli gry i musisz martwić się o szybkość, czas i szybkość reakcji.

Jeśli jednak będziesz musiał wygenerować grafikę w locie, a następnie zapisać ją jako zmienną lub jako plik, pyglet stanie się znacznie bardziej skomplikowany, ponieważ zaczniesz obijanie się o niskopoziomowe funkcje OpenGL. W tych scenariuszach pygame jest znacznie bardziej przyjazny dla użytkownika, dzięki renderowaniu oprogramowania i klasie powierzchni. Możesz też użyć biblioteki obrazowania Pythona i połączyć ją z pygletem.

Oczywiście, w przypadku gier 3D i tak będziesz musiał obijać się z funkcjami OpenGL, w takim przypadku polecam pyglet zamiast pygame + PyOpenGL.

 12
Author: ztangent,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-02 20:34:31

Chciałbym dodać, że istnieje szybka biblioteka sprite Rabbyt, która może być dobrym uzupełnieniem dla Pygleta.

 5
Author: sastanin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-04 07:10:04

Po obejrzeniu pygame i pygleta okazało się, że pyglet jest łatwiejszy do odebrania i był w stanie napisać prostą grę w stylu breakout w ciągu kilku dni.

 2
Author: Alastair Montgomery,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-19 14:00:39