Monogame 的运行速度略低于目标 fps

Monogame runs slightly below target fps

我最近将我的游戏更改为 运行 144 fps,而不是默认的 60 fps,但它始终保持在 143 fps。这没什么大不了的,因为如果没有 fps 计数程序就无法区分,但我仍然想知道为什么会发生这种情况以及如何解决它。这是我的代码。

protected override void Initialize()
    {
        TargetElapsedTime = TimeSpan.FromSeconds(1.0 / 144.0f);

        IsFixedTimeStep = true;

        graphics.SynchronizeWithVerticalRetrace = false;

        base.Initialize();
    }

在调用 Game.UpdateGame.Draw 之后,MonoGame 通过调用系统休眠函数(准确地说是 Thread.Sleep())来消耗任何多余的时间。 sleep 调用最多具有毫秒级精度,并且可能因各种因素而变差。 143 和 144 FPS 之间的差异约为每帧 0.05 毫秒 - 远小于系统计时器分辨率。

据我所知,您无能为力(除了尝试在 144 FPS 显示器上启用垂直同步)。差异确实很小,并且会受到测量误差的影响。我不会费心去修复它。

经过数小时的修改代码后,我发现这是最佳的设置组合。我让 VSync 打开但禁用了 "FixedTimeStep"。游戏现在以 144fps 的速度相当稳定地运行,除非它在标准显示器上,在这种情况下它以 60fps 的速度运行。这意味着我必须将一些动画更改为基于时间而不是基于帧,但无论如何我都在考虑这样做。

protected override void Initialize()
    {
        TargetElapsedTime = TimeSpan.FromSeconds(1.0 / 144.0f);

        IsFixedTimeStep = false;

        base.Initialize();
    }