我最近将游戏改为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();
}
答案 0 :(得分:2)
在调用Game.Update
和Game.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();
}