c#Xna关闭了FixedTimeStep,但仍然更新了最大呼叫数。 60次

时间:2014-01-21 17:26:46

标签: c# xna

大家好我刚刚制作了一个小算法来显示屏幕上的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回复

2 个答案:

答案 0 :(得分:5)

我相信你的问题是Vertical Syncing,图形设备的这个功能是将帧速率锁定到你的显示器刷新率。要解决此问题,您需要关闭SynchronizeWithVerticalRetrace中的VSync(GraphicsDeviceManager):

graphicsDeviceManager.SynchronizeWithVerticalRetrace = false;
graphicsDeviceManager.ApplyChanges();

graphicsDeviceManager是您的游戏GraphicsDeviceManager

答案 1 :(得分:0)

如果我记得正确的固定时间步长=假导致在绘制方法之前调用更新,而不是尽可能频繁地调用它。因此,您应该检查Vsync或其他东西是否将您的应用程序限制为60fps。