我有一些使用Pygame的经验,但是现在似乎围绕Pyglet很受关注。
这两个库有什么区别?在功能和易用性方面,使用其中一个有什么优势?
最后,您是否认为其中一个比另一个更符合Python风格?
我在考虑为一个小型2D射击游戏选择Pygame和Pyglet,在查看了源代码和一些教程之后,我选择了Pyglet,并对结果感到非常满意。
Pyglet可以立即使用,非常易于使用,概念上也非常清晰。它对我来说确实具有Pythonic的感觉:您可以非常快地获得简单明了的示例,并使用装饰器有效地处理事件。它还没有强制规定特定的程序结构,这使我可以很容易地将Pymunk(http://code.google.com/p/pymunk/)中的物理建模混合在一起。
虽然它基于OpenGL,您可以使用这些功能进行特殊效果,但我没有任何了解OpenGL的知识也能够做得很好。
它还与py2exe和py2app兼容,这很重要,因为许多人没有安装Python解释器。
不足之处是,网上关于它的信息较少,因为它较新,可供参考的示例游戏也较少。
此外,它与先前版本相比发生了相当大的变化,因此一些教程现在已经过时(“新风格事件循环”和Sprite类是主要添加内容)。
我建议您下载示例(包括一个名为Astraea的不错的“小行星”克隆版),看看是否喜欢这种风格。
我还在pyglet-users邮件列表中找到了这个讨论:从pygame+pyopengl到pyglet
声明:我还没有使用过任何一个,只是尝试了一些教程;-)
如果你从不打算在游戏中绘制任何矢量图形或基本图形,只是加载硬盘上的图像,那么Pyglet非常好用(适用于2D游戏)。它更加简洁,因为无需编写自己的游戏循环,也不用担心速度、时间和响应性的问题。
但是,如果你需要实时生成图形,并将其保存到变量或文件中,则使用Pyglet会变得更加复杂,因为你需要开始涉及底层的OpenGL函数。在这种情况下,pygame非常友好,具有软件渲染和Surface类,或者你可以使用Python Imaging Library并将其与Pyglet接口。
显然,在3D游戏中,你无论如何都必须操纵OpenGL函数,在这种情况下,我建议选择Pyglet而不是pygame+PyOpenGL。
我想补充一点,有一个快速的精灵库Rabbyt,可能是Pyglet的一个很好的补充。
我看了pygame和pyglet两种游戏引擎,发现pyglet更容易上手,几天内就能写出一个简单的打砖块游戏。