1

我正在寻找用 Python 制作 2d 横向滚动游戏,但是我不确定要使用什么库。我知道 PyGame(3 年未更新)、Pyglet 和 PyOpenGL。我的问题是我找不到任何用 Python 制作的实际发布的游戏,更不用说这些库了——所以我不知道它们在现实世界中的表现如何,或者即使它们中的任何一个都适合在真正的游戏,而不是比赛。

任何人都可以对这些库有所了解吗?PyGame 是否仍然有效使用?Pyglet值得吗?它们中的任何一个都被用来制作游戏吗?还有其他我忘记的图书馆吗?

老实说,我什至不确定我是否想使用 Python,它似乎太慢了,未经证实(对于仅用 Python 编写的游戏)等等......我还没有发现任何主要用 Python 制作的游戏,当然,已售出。如果我最终不使用 Python,那么第二个/更好的选择是什么?爪哇?卢阿?

4

3 回答 3

7

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 进行逻辑控制并从您的库中获取数据。如果你遵循这个简单的规则,你真的不应该遇到任何性能问题。

于 2012-08-18T07:16:33.590 回答
4

根据我的经验,真正要杀死你的东西通常与图形无关。当然,在不使用脏矩形更新等技术的情况下,在 16 毫秒内完成所有帧渲染是一项挑战,但这不会是大问题 thing you'll lose sleep over. The biggest performance considerations are going to come from much more elementary things - collision detection, spatial searching, and pathfinding are three of the big ones - that can easily send your logic frame rate into the floor if done inefficiently over even a few hundred objects. For problems like these, pure Python may not be the best choice, but it's not hard to offload these to C/C++ while retaining Python for higher-level logic. This is essentially what games like Civilization 4 and EVE Online (client and server!) do - offload performance-critical code to C++ while retaining the flexibility and simplicity of Python for 'everyday' tasks.

pygame 正在积极开发(他们有一段时间没有稳定的版本,但 Mercurial 存储库非常活跃)并且相当受欢迎。它还在底层使用了广受好评的(基于 C 的!)SDL 库。pyglet 也在积极开发中,并使用 OpenGL 进行所有渲染,如果您打算朝这个方向发展(因为您已经掌握了大部分基础知识),则可以更容易地转向 3D 开发。

如果您决定走非 Python 路线,您可以直接将 SDL 与 C/C++ 一起使用,以及 SDL_gfx(用于原语)、SDL_ttf(用于文本)和 SDL_net(用于基本网络)等附加库。另一个出色且广泛使用的 C/C++ 替代方案是Allegro。我两者都用过,我会声称这在很大程度上取决于你的口味。

于 2012-08-18T07:20:24.607 回答
1

Pygame 应该足以满足您的需求。Pygame 是稳定的,如果您浏览网站,您会发现使用 pygame 编码的游戏。您希望实现什么类型的游戏?

于 2012-08-18T06:41:03.377 回答