比较Pygame#
PyGame和Arade都是使创建2D游戏变得容易的Python库。PYGAME基于栅格图形。它在处理单个像素方面速度非常快,几乎可以在任何东西上运行。Arade使用OpenGL。它非常快地绘制精灵和卸载功能,如旋转和透明度到图形卡。
2023年,皮博格公司在 Original Pygame 以及 Pygame Community Edition (PYGAME-CE)。在这一点上,代码库仍然非常相似。
类库信息#
功能比较#
以下是Arade 3.0和PyGame 2.2.0 ce之间的一些比较:
功能 |
Arcade |
皮博格 |
---|---|---|
图形基元支持旋转 |
是 |
不是 [1] |
精灵支持旋转 |
是 |
不是 [1] |
精灵支持缩放 |
是 |
不是 [1] |
纹理图集 [2] |
是 |
不是 |
类型提示 |
是 |
是 |
透明度支持 |
是 |
是 |
摄像头支持 |
不是 |
|
Android支持 |
不是 |
是 |
支持覆盆子PI |
不是 |
是 |
批处理绘图 |
通过GPU |
通孔表面 [3] |
默认Hitbox |
![]() |
![]() |
切片地图支持 |
不是 |
|
物理引擎 |
Simple, platformer, and PyMunk |
无 |
事件管理 |
基于Pyglet的,编写处理事件的函数 |
编写您自己的事件循环。可以通过像这样的附加组件来绕过这个问题 Pygame Zero ) |
查看支持 |
不是 |
|
轻型支架 |
不是 |
|
图形用户界面支持 |
否(或添加 pygame-gui ) |
|
GPU着色器支持 |
不是 |
|
内置资源 |
不是 |
性能比较#
这些性能测试是在搭载GeForce GTX 980钛的英特尔酷睿i7-9700F上进行的。测试源代码可在以下站点获得:
精灵绘画#
图形库绘制不移动的精灵的速度有多快?此图显示了计算机可以保持的每秒帧数(FPS)与每帧绘制的精灵数:
为什么Arcade跑得这么快?Arade将精灵加载到图形处理器上,几乎不需要CPU的工作就可以重新绘制静止的精灵。这使得它可以将静止精灵的绘制比例调整到100万+,并且仍然保持60 FPS。
虽然PYGAME的速度可能会快速下降,但在FPS下降之前,仍有数千个精灵可以在屏幕上绘制。对于许多比赛来说,这已经足够了。此外,对于不会移动的精灵,在游戏开始时,PYGAME程序可以将精灵绘制到一个“表面”上。然后,程序可以在一次操作中将该表面用于屏幕。
我们能以多快的速度画出移动的精灵?移动的精灵更具挑战性,因为我们不能简单地使用我们在前一帧中所做的。
Arcade只更新精灵的更改位置,将尺寸和图像保留在GPU上,使其仍然可以快速更新。
Arcade还提供了两个精灵课程。功能全面的 arcade.Sprite
类和更小、更快的 arcade.BasicSprite
班级。如果您不需要碰撞检测或物理支持, BasicSprite
课程效果很好。
冲突处理#
游戏中另一个对时间至关重要的因素是确定精灵是否发生碰撞所需的时间:
通常,碰撞检测是O(N)运算。也就是说,如果你要检查一个精灵是否与1000个其他精灵中的任何一个相撞,我们有1000个检查要做。如果有很多精灵,这需要时间。
Arcade有两种方法可以加快这一速度。
空间散列。如果我们知道这1000个精灵根本不会移动(或非常不会移动),我们就可以建立一个网格。我们找出玩家所在的网格位置。然后我们只检查玩家与1000个精灵中的任何一个在相同的网格位置。这对于平台、坡道等不移动的平铺地图非常有效。它让我们更接近O(1)时间。
将负载转移到GPU。由于您的显卡上有1,000个处理器,我们可以在那里计算冲突。然而,设置GPU需要时间。只有当我们有1500个左右的精灵要检查时,这才会更快。
“简单”检查一切。仍然有很多技巧可以让它变得更快,特别是在使用Python3.11代码时,它在大多数情况下运行得很好。
Arcade具有多个模式,允许您选择这些碰撞选项。
形状#
除了精灵,库绘制各种图形形状的速度有多快?矩形、圆形、圆弧等?
下一个基准测试着眼于绘制矩形。需要牢记的重要事项:
PYGAME使用内存消隐,速度非常快,以及它为什么会位居榜首。如果您绘制的是未旋转的矩形以外的任何内容,这就不起作用了。
Arcade的形状很简单,但速度慢得离谱。谢天谢地,您可以在与Arade相同的程序中使用Pyglet形状。对于十几个左右的形状,程序都应该这样做。
Arcade有一个纯色矩形的Sprite类。如果您需要矩形,请选择 SpriteSolidColor 将是此处未显示的高性能选项。
如果形状需要旋转,该怎么办?Pyglet可以将这一任务卸载到GPU上,这使得它的执行速度比依赖CPU的PyGame更快。