大家好我刚刚制作了一个小算法来显示屏幕上的fps。
frames_temp++;
frames_Time += (int)gameTime.ElapsedGameTime.TotalMilliseconds;
if (frames_Time >= 1000)
{
frames = frames_temp;
frames_temp = 0; frames_Time = 0;
}
此代码剪切位于Update-method中。帧变量存储绘制到屏幕的实际值(只是发布该代码,以确保没有错误,尽管我已经检查过它)。 现在的问题是我无法关闭IsFixedTimeStep。我在构造函数中设置为false,初始化甚至更新方法,但程序仍将我的fps限制为~60。我要么在我的update-method中输入for()查询,运行数百万个循环而没有帧丢失,以确保它不是我的cpu太慢。我已经尝试的另一件事是使用我自己的timeSpan和系统时间来获取调用Update()之间经过的时间,这给了我相同的输出。现在99%确定更新每秒只运行60次。
那么为什么我不能像IsFixedTimeStep为假时那样经常调用Update-Method
Ty回复
答案 0 :(得分:5)
我相信你的问题是Vertical Syncing,图形设备的这个功能是将帧速率锁定到你的显示器刷新率。要解决此问题,您需要关闭SynchronizeWithVerticalRetrace
中的VSync(GraphicsDeviceManager
):
graphicsDeviceManager.SynchronizeWithVerticalRetrace = false;
graphicsDeviceManager.ApplyChanges();
graphicsDeviceManager
是您的游戏GraphicsDeviceManager
答案 1 :(得分:0)
如果我记得正确的固定时间步长=假导致在绘制方法之前调用更新,而不是尽可能频繁地调用它。因此,您应该检查Vsync或其他东西是否将您的应用程序限制为60fps。