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.Update
和 Game.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();
}
我最近将我的游戏更改为 运行 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()
)来消耗任何多余的时间。 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();
}