与Pygame比较#
PyGame和Arcade都是使创建2D游戏变得容易的Python库。PYGAME基于栅格图形。它在处理单个像素方面速度非常快,几乎可以在任何东西上运行。Arcade使用OpenGL。它非常快地绘制精灵和卸载功能,如旋转和透明度到图形卡。
以下是Arcade 2.6和PyGame 2.0.1之间的一些比较:
功能 |
Arcade |
Pygame |
---|---|---|
图形基元支持旋转 |
是 |
不是的 1 |
精灵支持旋转 |
是 |
不是的 1 |
精灵支持缩放 |
是 |
不是的 1 |
Sprite图像缓存 2 |
是 |
不是的 |
类型提示 |
是 |
不是的 |
透明度支持 |
是 |
必须指定透明颜色键 |
摄像头支持 |
不是的 |
|
Android支持 |
不是的 |
是 |
支持覆盆子PI |
不是的 |
是 |
批处理绘图 |
通过GPU |
通孔表面 3 |
默认Hitbox |
![]() |
![]() |
切片地图支持 |
不是的 |
|
物理引擎 |
Simple, platformer, and PyMunk |
无 |
事件管理 |
基于Pyglet的 |
否(或添加 Pygame Zero ) |
查看支持 |
不是的 |
|
轻型支架 |
不是的 |
|
图形用户界面支持 |
否(或添加 pygame-gui ) |
|
GPU着色器支持 |
不是的 |
|
内置资源 |
不是的 |
功能 |
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秒 |
程序绘图的FPS比较 静止 精灵。#
程序绘图的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进行这些操作,不需要额外的代码或性能影响。