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