【问题标题】:Why is Pygame so much slower than 2d game engines?为什么 Pygame 比 2d 游戏引擎慢这么多?
【发布时间】:2020-07-22 06:51:15
【问题描述】:

我是 godot 用户和 Python 用户。在 pygame 中,在像 pong 这样的简单游戏中,我在全屏时平均有 55-60 FPS。此外,当移植到 Kivy 时,我的平均 FPS 为 60-70FPS。但是当我在 Godot 中编写代码时,在分析时,视口中的平均 FPS 为 180-200!我的程序在两者中都非常相似,而且我在 Godot 中根本不是静态类型。为什么 pygame 这么慢,有没有我可以让它更快?

【问题讨论】:

  • 我的猜测是引擎内部效率更高。
  • Pygame 使用 SDL 进行图形处理,这可能不如 Godot 内置的 2D 图形引擎效率低,或者 Python 的开销可能比 Godot 脚本多。也可能是您的程序是异常值,其他尝试会显示不同的结果。仅仅因为一次尝试表明 pygame 在此示例中较慢并不意味着它总是如此。
  • 我没用过 Godot,但是看起来 Godot 用的语言比较快,比如 c# 和 c++,python 比其他语言慢
  • Godot 的主要语言是 GDScript - 一种动态类型语言,语法与 python 相似。
  • @Trilarion 我已经尝试过其他方法,Godot 总是快 80FPS 左右,我只是没有关于这些测试的任何统计数据。

标签: python pygame godot


【解决方案1】:

Godot 正在使用OpenGL ES for drawing to the window。 PyGame 基于 SDL,它根本不使用 硬件图形 原语。你也可以将你的游戏移植到Kivy,它也支持OpenGL ES。

在将像素推送到屏幕方面,使用 CPU 绘制的图形与在 GPU 上运行的图形不是 CPU 可以赢得的比赛。也就是说,对于很多游戏风格,PyGame 已经足够快了。刷新屏幕的速度比刷新显示器的速度快是绝对没有意义的。

我希望 PyGame 中的基本 Pong 始终以全 FPS 运行。在一个巨大的高 DPI 显示器上,甚至可能擦除背景就足以降低 FPS 的像素负载。

【讨论】:

  • 我确实在 Kivy 中制作了这款游戏 - 你可以在我的 Github 帐户上看到它,但它仍然达到了 60-70FPS 左右。由于 Kivy 默认使用 PSdl2,我认为它也在使用 SDL,因此是相似的。我也出于某种原因写了 30,我的意思是 55。我已经更新了它。
  • 看来SDL might also use OpenG。也许 pygame 开发人员只是没有选择它。我想知道SDL2 based versions of pygame 是否更快。
猜你喜欢
  • 2014-07-16
  • 2010-10-19
  • 1970-01-01
  • 2020-01-17
  • 1970-01-01
  • 2011-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多