Xna 单打游戏的速度略低于目标fps

Xna 单打游戏的速度略低于目标fps,xna,monogame,frame-rate,Xna,Monogame,Frame Rate,我最近改变了我的游戏以144 fps的速度运行,而不是默认的60 fps,但它始终保持在143 fps。这没什么大不了的,因为如果没有fps计数程序,你无法分辨出两者之间的区别,但我仍然想知道为什么会发生这种情况,以及如何解决它。这是我的密码 protected override void Initialize() { TargetElapsedTime = TimeSpan.FromSeconds(1.0 / 144.0f); IsFixedTimeS

我最近改变了我的游戏以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.Update
Game.Draw
后,MonoGame通过调用系统睡眠函数(
Thread.sleep()
)来花费多余的时间。睡眠通话最多有毫秒的准确度,根据各种因素,准确度可能更差。143和144 FPS之间的差异约为每帧0.05毫秒,比系统计时器分辨率小


据我所知,除了尝试在144 FPS的显示器上启用VSync之外,您几乎无能为力。这种差异实际上是最小的,并且会受到测量误差的影响。我不会费心去修复它。

经过几个小时的代码修补,我发现这是最好的设置组合。我使VSync保持打开状态,但禁用了“FixedTimeStep”。游戏现在以144fps的速度持续运行,除非它在标准显示器上,在这种情况下,它以60fps的速度运行。这意味着我必须将一些动画更改为基于时间而不是基于帧的,但我一直在考虑这样做

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

        IsFixedTimeStep = false;

        base.Initialize();
    }

我不太清楚原因,但我发现Monogame总是比您预期的少渲染一帧。尝试将TargetReleasedTime设置为145 FPS