3

我只是想知道,在制作游戏时,我注意到 IsRunningSlowly 的 GameTime 值在我的游戏有焦点时返回 false(应该如此),但是当我更改应用程序时,它变为 true。我什至做了一个空游戏,即使它失去焦点,IsRunningSlowly 的 GameTime 值也会返回 true。我想知道为什么它会这样做?只是我的电脑,还是 XNA 的创造者是这样设计的?帧速率看起来不错,但值是真实的。没什么大不了的,我只是真的很好奇!

[空游戏]

    public class Game1 : Microsoft.Xna.Framework.Game
{
    #region Constuctors

    public Game1()
    {
        this.GraphicsManager = new Microsoft.Xna.Framework.GraphicsDeviceManager(this);
        this.Content.RootDirectory = "Content";
    }

    #endregion
    #region Overrides

    protected override void LoadContent()
    {
        this.SpriteBatch = new Microsoft.Xna.Framework.Graphics.SpriteBatch(this.GraphicsDevice);
        base.LoadContent();
    }
    protected override void Update(Microsoft.Xna.Framework.GameTime GameTime)
    {
        System.Console.WriteLine(GameTime.IsRunningSlowly);
        Microsoft.Xna.Framework.Input.KeyboardState Keyboard = Microsoft.Xna.Framework.Input.Keyboard.GetState();
        if (Keyboard.IsKeyDown(Microsoft.Xna.Framework.Input.Keys.Escape)) this.Exit();
        base.Update(GameTime);
    }
    protected override void Draw(Microsoft.Xna.Framework.GameTime gameTime)
    {
        GraphicsDevice.Clear(Microsoft.Xna.Framework.Color.CornflowerBlue);
        base.Draw(gameTime);
    }

    #endregion
    #region Variables

    private Microsoft.Xna.Framework.GraphicsDeviceManager GraphicsManager { get; set; }
    private Microsoft.Xna.Framework.Graphics.SpriteBatch SpriteBatch { get; set; }

    #endregion
}
4

2 回答 2

7

我会尝试回答这个问题,而不是发布“这就是它的样子”。XNA 线程在失去焦点时休眠。它是在 XNA 的游戏类中配置的。

InactiveSleepTime = new TimeSpan(0);

默认设置为 20ms,设置为 0 将使 XNA 在失去焦点时全速运行。

IsRunningSlowly 设置为 true,因为帧速率低于 60(这是设置 IsFixedTimeStep 时的默认值)

于 2013-11-15T19:51:01.237 回答
2

这是设计使然。游戏是目前最消耗资源的应用程序之一,因此 XNA 框架开发人员自然认为,在游戏不聚焦时丢弃一些帧以节省一些 CPU 用于您可能想要执行的其他操作可能是个好主意而游戏在后台。

DrawXNA 游戏在其主窗口最小化时也不进行调用。我相信Update电话永远不会掉线(尽管我可能错了)。

于 2013-02-22T20:06:26.783 回答