为什么pygame.display.update()比pygame.display.flip()慢?

时间:2018-02-13 15:10:04

标签: python pygame

我不明白pygame.display.update()pygame.display.flip()之间的区别。

我已尝试过两者,似乎update()flip() ...

修改

我的问题是为什么没有参数的update()flip()慢得多。

谢谢!

1 个答案:

答案 0 :(得分:4)

您必须先了解pygame.display.flippygame.display.update的工作方式。

当设置了屏幕模式pygame.DOUBLEBUF时,Pygame实际上维护了两个屏幕:当前显示的活动屏幕和一个缓冲区你(程序员) )可以在幕后更新(没有用户看到任何东西)。

完成对缓冲区的编辑后,可以使用pygame.display.flip将活动屏幕切换为缓冲区。整个屏幕都会更新。这是更新整个屏幕的推荐方法。此外,这是更新非软件屏幕的唯一方法(例如OPENGL和硬件加速屏幕)。

另一方面,

pygame.display.update将屏幕视为一组像素(称为软件屏幕)。这允许Pygame程序仅更新屏幕的一部分。这个速度更快,因为只需要修改一部分屏幕。

现在,如果要更新整个屏幕(pygame.display.flippygame.display.update而没有任何参数),pygame.display.flip会更快。

请记住,我说OpenGL和HW加速屏幕(也是SOFT-screens)维护缓冲区。绘制到此缓冲区的速度很慢,但翻转速度非常快(在HW-screen和OpenGL中)。使用pygame.display.update更新整个屏幕的速度甚至更慢,因为它会逐像素地执行并且没有硬件加速。