Python游戏库Pygame和Pyglet之间的区别?

45

我有一些使用Pygame的经验,但是现在似乎围绕Pyglet很受关注。

这两个库有什么区别?在功能和易用性方面,使用其中一个有什么优势?

最后,您是否认为其中一个比另一个更符合Python风格?

5个回答

32

我在考虑为一个小型2D射击游戏选择Pygame和Pyglet,在查看了源代码和一些教程之后,我选择了Pyglet,并对结果感到非常满意。

Pyglet可以立即使用,非常易于使用,概念上也非常清晰。它对我来说确实具有Pythonic的感觉:您可以非常快地获得简单明了的示例,并使用装饰器有效地处理事件。它还没有强制规定特定的程序结构,这使我可以很容易地将Pymunk(http://code.google.com/p/pymunk/)中的物理建模混合在一起。

虽然它基于OpenGL,您可以使用这些功能进行特殊效果,但我没有任何了解OpenGL的知识也能够做得很好。

它还与py2exe和py2app兼容,这很重要,因为许多人没有安装Python解释器。

不足之处是,网上关于它的信息较少,因为它较新,可供参考的示例游戏也较少。

此外,它与先前版本相比发生了相当大的变化,因此一些教程现在已经过时(“新风格事件循环”和Sprite类是主要添加内容)。

我建议您下载示例(包括一个名为Astraea的不错的“小行星”克隆版),看看是否喜欢这种风格。


31

许可:

  • Pygame: LGPL许可证
  • Pyglet: BSD许可证

库依赖:

  • Pygame在很大程度上依赖于SDL库
  • Pyglet是一个纯Python库,依赖较少,我认为它需要更好地理解OpenGL。

社区:

  • Pygame已经存在很长一段时间了,很多人使用它
  • Pyglet是一个新库

受众:

  • Pygame面向游戏开发(光标,精灵,手柄/游戏手柄支持)
  • Pyglet更通用(尽管它有一个Sprite类)

我还在pyglet-users邮件列表中找到了这个讨论:从pygame+pyopengl到pyglet

声明:我还没有使用过任何一个,只是尝试了一些教程;-)


1
Pyglet必须依赖于OpenGL,就像Pygame依赖于SFL一样。 - Eli Bendersky
2
真的,但据我所知,它通过操作系统API访问GL调用,而SDL在大多数情况下需要安装。公平地说,对于更高级的A / V支持,Pyglet需要AVbin。 - David Eyk

16

如果你从不打算在游戏中绘制任何矢量图形或基本图形,只是加载硬盘上的图像,那么Pyglet非常好用(适用于2D游戏)。它更加简洁,因为无需编写自己的游戏循环,也不用担心速度、时间和响应性的问题。

但是,如果你需要实时生成图形,并将其保存到变量或文件中,则使用Pyglet会变得更加复杂,因为你需要开始涉及底层的OpenGL函数。在这种情况下,pygame非常友好,具有软件渲染和Surface类,或者你可以使用Python Imaging Library并将其与Pyglet接口。

显然,在3D游戏中,你无论如何都必须操纵OpenGL函数,在这种情况下,我建议选择Pyglet而不是pygame+PyOpenGL。


5

我想补充一点,有一个快速的精灵库Rabbyt,可能是Pyglet的一个很好的补充。


那个链接已经失效了。请尝试以下其中一个链接:http://arcticpaint.com/projects/rabbyt/(新页面?),http://pypi.python.org/pypi/Rabbyt/(在PyPI上),http://bitbucket.org/mmarshall/rabbyt/(版本化的源代码)。 - Denilson Sá Maia
不要以为它仍然活跃。最后一次提交是在2016年。 - Ethan Chan

4

我看了pygame和pyglet两种游戏引擎,发现pyglet更容易上手,几天内就能写出一个简单的打砖块游戏。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接