比较Pygame#

PyGame和Arade都是使创建2D游戏变得容易的Python库。PYGAME基于栅格图形。它在处理单个像素方面速度非常快,几乎可以在任何东西上运行。Arade使用OpenGL。它非常快地绘制精灵和卸载功能,如旋转和透明度到图形卡。

2023年,皮博格公司在 Original Pygame 以及 Pygame Community Edition (PYGAME-CE)。在这一点上,代码库仍然非常相似。

类库信息#

类库信息#

功能

Arcade

电子游戏原创

游戏机CE

网站

https://arcade.academy

https://www.pygame.org

https://pyga.me/

接口文档

API Docs

API Docs

API Docs

示例代码

Arcade Examples

Pygame Examples

Pygame-ce Examples

许可证

MIT License

LGPL

LGPL

后端图形引擎

OpenGL 3.3+和 Pyglet

SDL 2

SDL 2

后端音频引擎

Ffmpeg通过 Pyglet

SDL 2 和SDL_Mixer

SDL 2 和SDL_Mixer

示例项目

用Arade制作的游戏

Games Made With Pygame

第一次启动

2016

2000年前

分支机构2023

功能比较#

以下是Arade 3.0和PyGame 2.2.0 ce之间的一些比较:

功能比较#

功能

Arcade

皮博格

图形基元支持旋转

不是 [1]

精灵支持旋转

不是 [1]

精灵支持缩放

不是 [1]

纹理图集 [2]

不是

类型提示

透明度支持

摄像头支持

Yes

不是

Android支持

不是

支持覆盆子PI

不是

批处理绘图

通过GPU

通孔表面 [3]

默认Hitbox

../_images/hitbox_simple.png ../_images/hitbox_none.png

切片地图支持

Yes

不是

物理引擎

Simple, platformer, and PyMunk

事件管理

基于Pyglet的,编写处理事件的函数

编写您自己的事件循环。可以通过像这样的附加组件来绕过这个问题 Pygame Zero )

查看支持

Yes

不是

轻型支架

Yes

不是

图形用户界面支持

Yes

否(或添加 pygame-gui )

GPU着色器支持

Yes

不是

内置资源

Yes

不是

性能比较#

这些性能测试是在搭载GeForce GTX 980钛的英特尔酷睿i7-9700F上进行的。测试源代码可在以下站点获得:

精灵绘画#

图形库绘制不移动的精灵的速度有多快?此图显示了计算机可以保持的每秒帧数(FPS)与每帧绘制的精灵数:

../_images/fps_comparison_stationary_sprites.svg

为什么Arcade跑得这么快?Arade将精灵加载到图形处理器上,几乎不需要CPU的工作就可以重新绘制静止的精灵。这使得它可以将静止精灵的绘制比例调整到100万+,并且仍然保持60 FPS。

虽然PYGAME的速度可能会快速下降,但在FPS下降之前,仍有数千个精灵可以在屏幕上绘制。对于许多比赛来说,这已经足够了。此外,对于不会移动的精灵,在游戏开始时,PYGAME程序可以将精灵绘制到一个“表面”上。然后,程序可以在一次操作中将该表面用于屏幕。

我们能以多快的速度画出移动的精灵?移动的精灵更具挑战性,因为我们不能简单地使用我们在前一帧中所做的。

../_images/fps_comparison_moving_sprites.svg

Arcade只更新精灵的更改位置,将尺寸和图像保留在GPU上,使其仍然可以快速更新。

Arcade还提供了两个精灵课程。功能全面的 arcade.Sprite 类和更小、更快的 arcade.BasicSprite 班级。如果您不需要碰撞检测或物理支持, BasicSprite 课程效果很好。

冲突处理#

游戏中另一个对时间至关重要的因素是确定精灵是否发生碰撞所需的时间:

../_images/fps_comparison_stationary_collision.svg

通常,碰撞检测是O(N)运算。也就是说,如果你要检查一个精灵是否与1000个其他精灵中的任何一个相撞,我们有1000个检查要做。如果有很多精灵,这需要时间。

Arcade有两种方法可以加快这一速度。

  1. 空间散列。如果我们知道这1000个精灵根本不会移动(或非常不会移动),我们就可以建立一个网格。我们找出玩家所在的网格位置。然后我们只检查玩家与1000个精灵中的任何一个在相同的网格位置。这对于平台、坡道等不移动的平铺地图非常有效。它让我们更接近O(1)时间。

  2. 将负载转移到GPU。由于您的显卡上有1,000个处理器,我们可以在那里计算冲突。然而,设置GPU需要时间。只有当我们有1500个左右的精灵要检查时,这才会更快。

  3. “简单”检查一切。仍然有很多技巧可以让它变得更快,特别是在使用Python3.11代码时,它在大多数情况下运行得很好。

Arcade具有多个模式,允许您选择这些碰撞选项。

形状#

除了精灵,库绘制各种图形形状的速度有多快?矩形、圆形、圆弧等?

下一个基准测试着眼于绘制矩形。需要牢记的重要事项:

  • PYGAME使用内存消隐,速度非常快,以及它为什么会位居榜首。如果您绘制的是未旋转的矩形以外的任何内容,这就不起作用了。

  • Arcade的形状很简单,但速度慢得离谱。谢天谢地,您可以在与Arade相同的程序中使用Pyglet形状。对于十几个左右的形状,程序都应该这样做。

  • Arcade有一个纯色矩形的Sprite类。如果您需要矩形,请选择 SpriteSolidColor 将是此处未显示的高性能选项。

../_images/fps_comparison_unrotated_rects.svg

如果形状需要旋转,该怎么办?Pyglet可以将这一任务卸载到GPU上,这使得它的执行速度比依赖CPU的PyGame更快。

../_images/fps_comparison_rotated_rects.svg