为什么Pygame比2D游戏引擎要慢得多?

5
我是Godot和Python用户。在Pygame中,像乒乓球这样的简单游戏我在全屏状态下平均有55-60帧的FPS。此外,当转移到Kivy时,我平均有60-70 FPS的FPS。但是,当我在Godot中编码时,在视口中获得了平均180-200的FPS,并进行了分析!我的程序在两者中非常相似,而且在Godot中我没有使用静态类型。为什么pygame这么慢,有没有办法让它更快?

我的猜测是引擎内部更加高效。 - SnowGroomer
Pygame使用SDL进行图形处理,可能比Godot内置的2D图形引擎效率低,或者Python的开销比Godot Script大。也有可能你的程序是个例外,其他尝试可能会得出不同的结果。仅仅因为一个尝试表明在这个例子中pygame更慢,并不意味着它总是如此。 - Trilarion
我没有使用过Godot,但是它似乎使用更快的语言,比如C#和C++,与其他语言相比,Python的速度真的很慢。 - The Big Kahuna
Godot的主要语言是GDScript,它是一种动态类型语言,具有类似于Python的语法。 - Nv7
@Trilarion 我已经尝试了其他的东西,但Godot总是比它们快80FPS左右,只是我没有对那些测试进行统计。 - Nv7
也许在问题中包含其他尝试的简短描述会很有帮助。 - Trilarion
1个回答

5
Godot正在使用OpenGL ES来绘制窗口。PyGame基于SDL,它根本不使用硬件图形原语。您还可以将游戏移植到Kivy,它也支持OpenGL ES。
就将像素推送到屏幕,使用CPU绘制图形与运行在GPU上的图形相比,CPU永远无法赢得胜利。 话虽如此,在许多游戏风格中,PyGame足够快。 没有更新屏幕超过显示器刷新速率的意义。
我希望一个基本的Pong在PyGame中始终以全-FPS运行。 在巨大的高DPI显示器上,甚至擦除背景就足以降低FPS。

我实际上是用Kivy制作了这个游戏 - 你可以在我的Github账户上看到它,但它仍然只有60-70FPS。由于Kivy默认使用PSdl2,我认为它也在使用SDL,因此类似。我还因某种原因写了30,我想表达的是55。我已经更新了它。 - Nv7
1
似乎SDL也可以使用OpenG。也许pygame的开发者们只是没有选择它。我想知道基于SDL2的pygame版本是否更快。 - Trilarion
1
@NoDataDumpNoContribution 那个SDL 1.x页面是在讨论如何同时使用PyGame和PyOpenGL。你仍然需要使用PyOpenGL的API来处理图形。如果你想要更快的速度,你需要查看一下PyGame是否有基于SDL2的Render API的相关内容。(这个API旨在为任务提供GPU加速的2D加速,比如将DirectDraw游戏移植到现代系统中。Ryan Gordon在他的演讲中将Render API描述为“你见过的最炒作的超级任天堂”之一。) - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接