与Pygame比较#

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

以下是Arcade 2.6和PyGame 2.0.1之间的一些比较:

类库信息#

功能

Arcade

Pygame

网站

https://arcade.academy

https://www.pygame.org

接口文档

API Docs

API Docs

示例代码

Example Code

不适用

许可证

MIT License

LGPL

后端图形引擎

OpenGL 3.3+和 Pyglet

SDL 2

后端音频引擎

Ffmpeg通过 Pyglet

SDL 2

示例项目

用Arcade制作的游戏

Games Made With Pygame

功能比较#

功能

Arcade

Pygame

图形基元支持旋转

不是的 1

精灵支持旋转

不是的 1

精灵支持缩放

不是的 1

Sprite图像缓存 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

不是的

性能比较 4#

功能

Arcade

Pygame

绘制50,000个静止精灵

0.001秒

0.425秒

移动5,000个精灵

0.010秒

0.003秒

#精灵程序可以在FPS降至55以下之前移动+绘制

8500

2000

碰撞检测50,000个精灵

0.044秒无空间散列 5
使用空间散列的0.005秒

0.004秒 6

绘制5,000个普通矩形 7

0.081秒

0.008秒

绘制5,000个旋转的矩形 8

0.081秒

0.029秒

_images/fps_comparison2.svg

程序绘图的FPS比较 静止 精灵。#

_images/fps_comparison1.svg

程序绘图的FPS比较 搬家 精灵。#

1(1,2,3)

为了支持旋转和/或缩放,PyGame程序必须将图像写入曲面,变换曲面,然后在曲面上创建精灵。这需要占用大量的CPU。Arcade将所有这些操作都转移到显卡上。

2

当从图像创建精灵时,每次PYGAME都会从磁盘加载图像。用户必须使用自己的代码缓存图像以获得更好的性能。Arcade会自动执行此操作。

3

程序员可以通过绘制到一个表面,然后将该表面绘制到屏幕上来实现类似的结果。

4

在采用GeForce GTX 980钛的英特尔酷睿i7-9700F上进行的性能测试。Https://github.com/pythonarcade/performance_tests上提供了测试源代码,https://craven-performance-testing.s3-us-west-2.amazonaws.com/index.html上提供了更详细的结果

5

多边形命中框,允许旋转

6

矩形命中框,不允许旋转

7

为什么Arcade在这里这么慢?使用PyGame,大部分绘图都是在 CPU 边上。位图由CPU创建和操作。这是相当快的。在Arcade中,大部分绘图都发生在 GPU 边上。精灵和图画被批量处理在一起,我们只需告诉GPU我们想要更改什么。或者更好的是,我们编写了一个完全在GPU上运行的“着色器”程序。这是 令人难以置信的是 快地。但是,如果CPU程序运行命令来逐个绘制单独的GPU项目,则两组处理器都会等待同步通信。这实在是太慢了。像PyGame那样绘制单独的矩形和比特,在Arcade上根本不能很好地工作。使用精灵、着色器或批处理绘制来获得快速性能。

8

缩放和旋转必须由程序员绘制到一个表面,变换该表面,然后将该表面绘制到屏幕上。Arcade使用GPU进行这些操作,不需要额外的代码或性能影响。