在Python中制作2D游戏 - 应该使用哪个库?

时间:2012-08-18 06:32:30

标签: python pygame game-engine pyglet

我希望用Python制作一个2D侧滚动游戏,但是我不确定要使用哪个库。我知道PyGame(3年内没有更新),Pyglet和PyOpenGL。我的问题是我找不到任何用Python制作的实际游戏,更不用说这些库 - 所以我不知道它们在现实世界中的表现如何,或者即使它们中的任何一个适合用于实际游戏,而不是竞争。

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

老实说,我甚至不确定我是否想要使用Python,它看起来太慢,未经证实(对于仅用Python编写的游戏)等等......我还没有找到任何主要用Python制作的游戏,因为当然,已售出。如果我最终没有使用Python,那么第二个/更好的选择是什么? Java的? LUA?

3 个答案:

答案 0 :(得分:7)

Pygame只是SDL的一个包装器,所以在技术上很多游戏都是使用它制作的,大部分工作都是在C端完成的。这有点慢,但如果你正在进行2D游戏,那就足够了。 Frets-on-Fire是用纯Python用PyGame编写的,而FoFiX是用python编写的,带有C扩展,而且这些游戏都非常棒,而且在较慢的计算机上,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 ++作为go,因为你没有在Java中获得那么多的可用性优势,并且C语言的运行速度比Java快得多,而且Lua只会带走Python的一些可用性而不会给你任何东西。明显的性能提升。 SFML和SDL都可以直接从C(++)中使用。

建议如果您决定使用python:使用它,因为它应该被用作脚本语言。不要尝试在纯python中旋转或加载图像,或者使用您选择的库中可用的接口(它们都具有用于这些类型的非常好的接口)或者编写扩展模块来为您执行此操作。使用python进行逻辑控制并从库中获取数据。如果你遵循这个简单的规则,你真的不应该遇到任何性能问题。

答案 1 :(得分:4)

根据我的经验,真正要杀死你的东西通常与图形无关。当然,如果没有像脏矩形更新这样的技术,在不到16毫秒的时间内完成所有帧渲染是一项挑战,但这不会是你将失去睡眠的事情。最大的性能考虑因素将来自更基本的东西 - 碰撞检测,空间搜索和寻路是三个最重要的因素 - 如果在几百个对象上进行效率低下,就可以轻松地将逻辑帧速率发送到底层。对于像这样的问题,纯Python可能不是最好的选择,但是在保留Python用于更高级逻辑的同时将它们卸载到C / C ++并不困难。这基本上就像Civilization 4和EVE Online(客户端和服务器!)这样的游戏 - 将性能关键代码卸载到C ++,同时保留Python的“日常”任务的灵活性和简单性。

pygame正在积极开发(他们有一段时间没有稳定版本,但Mercurial存储库非常活跃)并且相当受欢迎。它还使用了引人注目的(基于C语言的)SDL库。 pyglet也在积极开发并使用OpenGL进行所有渲染,如果您计划朝这个方向发展,那么移动到3D开发会更容易(因为您已经拥有了大部分基础知识)。

如果您决定使用非Python路由,可以直接使用SDL和C / C ++,以及SDL_gfx(用于基元),SDL_ttf(用于文本)和SDL_net(用于基本网络)等插件库。另一个优秀且广泛使用的C / C ++替代方案是Allegro。我已经同时使用了这两种产品,并且我会声称这主要取决于您的口味。

答案 2 :(得分:1)

Pygame应该足以满足你的目标。 Pygame很稳定,如果你环顾网站,你会发现游戏已经用pygame编码。您希望实施哪种类型的游戏?

相关问题