Pygame 只是 SDL 的一个包装器,所以从技术上讲,很多游戏都是使用它制作的,无论如何大部分工作都是在 C 端完成的。这有点慢,但如果你在做一个 2D 游戏,它应该足够了。Frets-on-Fire是用 PyGame 用纯 Python 编写的,而FoFiX是用带有 C 扩展的 Python 编写的,这些游戏都非常棒,尽管在速度较慢的计算机上 FoFiX 可能无法运行 4 人游戏。
Pyglet 也很不错,虽然我只将它用于模拟器开发,绘制单层,所以我不知道它在游戏开发中的实际效果如何。我发现使用 Pyglet 直接使用 OpenGL 比使用 SDL/PyGame 更容易,所以如果你在做 3D 游戏,它可能比使用 SDL 更好。此外,由于它是用 python 编写的,因此很容易扩展类来更改函数的处理方式。例如,我试图通过 pyglet Texture 类将数据加载到 openGL 纹理中,但是该类无法以我想要的格式加载数据,所以我扩展了该类并更改了获取纹理类型的函数(来从字符串中)包含我想要的纹理,快速且无痛。
我没有看到提到的一个库是SFML。2.0 API(目前处于测试阶段)非常出色且易于使用,而且,如果我没记错的话,它的运行速度比 SDL 快一点。它也比 SDL 更“面向对象”,如果您使用像 Python 这样的 OO 语言,这真的很好。它有一些很好的 Python 绑定,由 Bastien Leonard 在 Cython 中编写,非常易于使用(或者如果您不想使用最新版本,也可以使用旧的 C 绑定)。我前一阵子用过这个,这是一次非常愉快的体验。
没有很多使用 Python 发布的游戏的原因很简单:你不能关闭 Python 源代码。即使您使用 Py2Exe 或其他工具将 python“编译”为可执行文件,它实际上只是将解释器和 python 源打包到一个 exe 文件中,只需在十六进制编辑器中打开 exe 即可获得源。
虽然我是“用 Python 编写,用 C 编写时间关键部分”的支持者,但如果你觉得 python 太慢,我可能会建议 C 或者最好是 C++ 作为要走的路,简单地说因为用 Java 编写并没有那么大的可用性优势,而且 C 语言的运行速度可能比 Java 快很多,而 Lua 只会带走 Python 的一些可用性,而不会给你带来任何明显的性能提升. SFML 和 SDL 都可以直接从 C(++) 中使用。
如果您决定使用 python,建议:按照应该使用的方式使用它,作为脚本语言。不要尝试在纯 python 中旋转或加载图像,要么使用你选择的库中可用的接口(它们都有非常好的接口用于这些事情),要么编写一个扩展模块来为你做这件事。使用 python 进行逻辑控制并从您的库中获取数据。如果你遵循这个简单的规则,你真的不应该遇到任何性能问题。