Monogame略低于目标fps

时间:2017-03-22 20:28:38

标签: xna monogame frame-rate

我最近将游戏改为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();
    }

2 个答案:

答案 0 :(得分:2)

在调用Game.UpdateGame.Draw后,MonoGame通过调用系统睡眠函数(确切地说Thread.Sleep())来花费任何多余的时间。睡眠呼叫最多具有毫秒精度,并且可能根据各种因素而更差。 143和144 FPS之间的差异大约是每帧0.05毫秒 - 比系统定时器分辨率小。

据我所知,除了尝试在144 FPS显示器上启用VSync之外,你几乎无能为力。差异非常小,并且会受到测量误差的影响。我不打算试图解决它。

答案 1 :(得分:0)

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

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

        IsFixedTimeStep = false;

        base.Initialize();
    }