垂直同步#
什么是垂直同步?#
垂直同步(VSYNC)是一个窗口选项,在该选项中,视频卡被阻止执行显示存储器可见的任何操作,直到监视器完成其当前刷新周期。
要在Arade中启用虚拟同步,请执行以下操作:
# On window creation
arcade.Window(800, 600, "Window Title", vsync=True)
# While the application is running
window.set_vsync(True)
这要视情况而定,有利有弊。
大多数窗口都是我们所说的“双缓冲”。这意味着窗口实际上有两个表面。一个可见的表面和一个隐藏的表面。所有绘制命令都将在隐藏曲面中结束。当我们绘制完框架时,隐藏的和可见的表面交换位置,新的框架就会显示给用户。
如果您的监视器没有正确地对这种交换表面的“舞蹈”进行计时,您可能会在移动过程中遇到小问题。
默认情况下禁用垂直同步#
默认情况下,在禁用垂直同步的情况下创建Arcade窗口。出于许多原因,这是一种安全得多的违约方式。
在某些环境中,垂直同步的上限为30 fps。这可以使游戏运行速度减半,如果
delta_time
没有被计算在内。我们不指望初学者拿到delta_time
在他们的项目中加以考虑。如果使用线程,则在应用程序等待垂直同步时,所有线程都将停止
如果在驱动程序级别强制禁用垂直同步,我们无法保证这一点。大量的驱动程序缺省值让应用程序控制这一点。
垂直同步的优势#
如果您的应用程序中有任何类型的移动、滚动或动画,您可能会定期或随机地注意到非常细微的打嗝。这可以通过启用垂直同步来减少或完全消除。在某些环境/平台中,您甚至可以体验 screen tearing 。
启用vsync后,我们必须确保所有移动均已完成 delta_time
正在考虑之中。 This can also improve smoothness when vsync is not enabled **
# Move 100 units in one second
MOVEMENT_SPEED = 100
def on_update(self, delta_time):
# Move your sprite based on the time since the last frame.
# This will make the sprite move along the x axis by
# 100 units in one second
self.sprite.center_x += MOVEMENT_SPEED * delta_time