垂直同步#

什么是垂直同步?#

垂直同步(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