2013-02-22 59 views
3

我只是想知道,而做一個遊戲,我注意到,當我的遊戲有重點IsRunningSlowly的GameTime值返回false(如它應該),但是當我改變應用,更改爲true。我甚至做了一個空的遊戲,即使它失去了焦點,IsRunningSlowly的GameTime值也會返回true。我想知道爲什麼會這樣做?這只是我的電腦,還是XNA的創造者這樣設計的?幀率看起來不錯,但值是真的。沒什麼大不了的,我真的很好奇!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 
} 

回答

2

這是由設計。遊戲是最耗費資源的應用程序之一,所以自然XNA框架開發人員認爲在遊戲不重點的時候放下一些框架可能是一個好主意,以便爲您可能想要執行的其他操作節省一些CPU而遊戲在後臺。

XNA遊戲也被最小化主窗口時,不會使Draw電話。我相信Update調用永遠不會掉線(儘管我可能是錯的)。

+0

看來,當您移動或調整窗口下降'Update's

IsRunningSlowly被設置爲true。 (我目前這個問題摔跤 - 還沒有證實此事還沒有100%)。 – 2013-02-23 06:40:03

+0

@AndrewRussell是的,我以前遇到過該功能。當移動遊戲窗口並調整其大小時,遊戲似乎會放棄所有更新。不能說這對我來說是一個很大的問題,但未來可能會增加多人遊戲支持和連接超時的可靠性。我的猜測是,這可能會受到包裝應用程序中運行遊戲的最壞情況的抵制,因爲我希望父窗口不會將「調整大小/移動」調用轉發到其子游戲窗口。你可能也想嘗試調整大小和移動,並且自動適應它 – user1306322 2013-02-23 08:39:01

+0

嗯無邊距(真正的)遊戲窗口的非遊戲窗口 - 幾乎正好我有這個問題。它停止抽取網絡事件並使網絡時間不同步。最惱人的。看來這是一個Win32的事情([很好的說明](http://www.gamedev.net/topic/488074-win32-message-pump-and-opengl---rendering-pauses-while-draggingresizing/?view=findpost&p= 4189300))。 – 2013-02-23 10:03:14

7

我會試着回答這個問題,並沒有張貼「這只是它是如何」。 XNA線程在失去焦點時會睡覺。它在XNA的遊戲類中配置。

InactiveSleepTime = new TimeSpan(0); 

默認設置爲20ms,將其設置爲0將使XNA在失去焦點時全速運行。由於幀率低於60(這是當IsFixedTimeStep設爲默認值)