【问题标题】:XNA Is Running Slow when focus is removed移除焦点时 XNA 运行缓慢
【发布时间】:2013-11-16 03:51:01
【问题描述】:

我只是想知道,在制作游戏时,我注意到 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
}

【问题讨论】:

    标签: xna lostfocus


    【解决方案1】:

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

    InactiveSleepTime = new TimeSpan(0);
    

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 当您移动或调整窗口大小时,它似乎会丢弃Updates。 (我目前正在努力解决这个问题 - 尚未 100% 验证。)
      • @AndrewRussell 是的,我以前遇到过该功能。移动和调整游戏窗口大小时,游戏似乎放弃了所有 Update 调用。不能说这对我来说是个大问题,但是当我添加多人游戏支持和连接超时以提高可靠性时,它可能会成为未来。我的猜测是,这可能会通过(最坏的情况)在包装应用程序中运行游戏来解决,因为我希望父窗口不会将“正在调整大小/移动”的调用转发到其子游戏窗口。此外,您可能想尝试一个非游戏窗口来调整大小和移动以及自动适应它的无边框(真实)游戏窗口
      • 嗯——几乎就是我遇到的问题。它停止发送网络事件并使网络时序不同步。最烦人的。似乎这是一个 win32 的事情 (good description)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-09
      • 2019-02-24
      • 2017-07-30
      • 2011-12-29
      • 2013-04-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多