首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Python制作2d游戏-应该使用哪个库?

用Python制作2d游戏-应该使用哪个库?
EN

Stack Overflow用户
提问于 2012-08-18 06:32:30
回答 3查看 6.4K关注 0票数 1

我想用Python制作一个2d侧滚动游戏,但是我不确定要使用什么库。我知道PyGame (已经3年没有更新了)、Pyglet和PyOpenGL。我的问题是,我找不到用Python制作的任何真正附带的游戏,更不用说这些库了--所以我不知道它们在现实世界中的表现有多好,或者它们中的任何一个适合在实际的游戏中使用,而不是竞争。

有谁能对这些图书馆有所了解吗?PyGame的使用是否仍然有效?皮格莱特值多少钱?他们中的任何一个被用来做游戏吗?还有其他我忘了的图书馆吗?

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-08-18 07:16:33

Pygame只是SDL的一个包装器,所以从技术上讲,很多游戏都是用它制作的,大多数工作都是C端完成的。这有点慢,不过如果你在玩2D游戏,那就足够了。焦虑不安是用PyGame用纯python编写的,FoFiX是用python编写的,有C扩展,而且这些游戏都很棒,而且在速度较慢的计算机上也很难运行4台FoFiX。

Pyglet也很不错,虽然我只将它用于仿真器开发,绘制单层,所以我不知道它在游戏开发中的实际效果如何。我发现与Pyglet一起使用直接OpenGL比使用SDL/PyGame容易得多,所以如果您正在做3D游戏,它可能比使用SDL更好。而且,由于它是用python编写的,所以很容易扩展类以更改函数的处理方式。例如,我试图通过pyglet纹理类将数据加载到openGL纹理中,但是这个类无法以我想要的格式加载数据,所以我扩展了该类,并更改了获得纹理类型(来自字符串)的函数,以包含我想要的纹理,快速和无痛。

有一个库我看得不够多,那就是SFML。2.0 API (目前处于beta版)非常出色,使用起来也很简单,而且,如果我没记错的话,它的运行速度比SDL略快一些。它也比SDL更“面向对象”,如果您使用Python这样的OO语言,SDL真的很不错。它有一些很好的Python绑定,由Bastien在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进行逻辑控制和从库中获取数据。如果你遵循这个简单的规则,你真的不应该遇到任何性能问题。

票数 7
EN

Stack Overflow用户

发布于 2012-08-18 07:20:24

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

游戏是积极开发的(他们已经有一段时间没有一个稳定的版本了,但是Mercurial存储库相当活跃),并且相当受欢迎。它还使用了备受好评的(基于C的!)引擎盖下的SDL库。pyglet也是积极开发的,它的所有渲染都使用了OpenGL,如果您计划朝这个方向发展,就可以更容易地转向3D开发(因为您已经掌握了大部分基础知识)。

如果您决定使用非Python路由,可以直接与C/C++一起使用SDL,以及SDL_gfx (用于原语)、SDL_ttf (用于文本)和SDL_net (用于基本网络)等addon库。C/C++的另一个优秀和广泛使用的替代方案是快板。我两种都用过,我会说这很大程度上取决于你喜欢哪一种。

票数 4
EN

Stack Overflow用户

发布于 2012-08-18 06:41:03

游戏应该足以满足你想要做的事情。游戏是稳定的,如果你环顾网站,你会发现游戏已经被编码在游戏里。你想要实现什么类型的游戏?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12016443

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档