我有一些使用 Pygame 的经验,但这些天似乎有很多关于 Pyglet 的嗡嗡声。
这两个库如何比较?在功能和易用性方面,使用其中一个有什么优势?
最后,你会说一个比另一个更Pythonic吗?
我还在 pyglet-users 邮件列表上找到了这个讨论:从 pygame+pyopengl 到 pyglet
免责声明:我还没有使用任何一个,只尝试了一些教程;-)
我正在考虑将 Pygame 和 Pyglet 用于小型 2D 射击游戏,在查看了源代码和一些教程之后,我使用了 Pyglet。我对结果非常满意。
Pyglet 立即工作,使用起来很愉快,并且在概念上非常干净。它确实给我一种 Pythonic 的感觉:你可以很快地得到一个简单易读的示例,并且它使用装饰器来很好地处理事件。它也没有强制使用特定的程序结构,这让我很容易融入 Pymunk 的物理建模 ( http://code.google.com/p/pymunk/ )。
虽然它基于 OpenGL,并且您可以将这些功能用于特殊效果,但我能够在不了解它们的情况下做得很好。
它也适用于 py2exe 和 py2app,这很重要,因为很多人没有安装 Python 解释器。
不利的一面是,由于它较新,因此网络上有关它的信息较少,而且可供查看的示例游戏也较少。
此外,它与以前的版本相比发生了很大变化,因此其中的一些教程现在已经过时(有“新样式事件循环”和 Sprite 类作为主要添加内容。)
我建议下载示例(包括一个不错的 Asteroids 克隆,名为 Astraea),看看你是否喜欢这种风格。
如果您从不打算在游戏本身中绘制任何矢量图形或图元,并且只坚持从磁盘加载图像,那么 Pyglet 是很好的(对于 2D 游戏)。它也更干净,因为无需编写自己的游戏循环,也无需担心速度、时间和响应能力。
但是,如果您必须即时生成图形,然后将它们保存为变量或文件,那么 pyglet 会变得相当复杂,因为您开始不得不处理低级 OpenGL 函数。在这些场景中,pygame 的软件渲染和 Surface 类更加用户友好。或者您可以使用 Python Imaging Library 并将其与 pyglet 接口。
显然,对于 3D 游戏,无论如何您都将不得不使用 OpenGL 函数,在这种情况下,我建议使用 pyglet 而不是 pygame + PyOpenGL。
我想补充一点,有一个快速精灵库Rabbyt,它可能是 Pyglet 的一个很好的补充。
在查看了 pygame 和 pyglet 之后,我发现 pyglet 更容易上手,并且能够在几天内编写一个简单的突围风格游戏。