3

ゲームを作成しているときに、IsRunningSlowly の GameTime の値が、ゲームにフォーカスがあるときに false を返すことに気付きましたが (そうあるべきです)、アプリケーションを変更すると true に変わります。空のゲームも作成し、フォーカスを失った場合でも、IsRunningSlowly の GameTime 値も true を返します。なぜこれを行うのだろうか?それは私のコンピューターだけですか、それとも XNA の作成者がこのように設計したのでしょうか? フレーム レートは問題ないように見えますが、値は true です。大したことではありません、私はただ本当に興味があります!

【空のゲーム】

    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);

デフォルトでは 20 ミリ秒に設定されており、0 に設定すると、XNA がフォーカスを失っている間、フル スピードで実行されます。

フレームレートが 60 を下回るため、IsRunningSlowly は true に設定されます (これは、IsFixedTimeStep が設定されている場合のデフォルトです)。

于 2013-11-15T19:51:01.237 に答える
2

これは仕様によるものです。ゲームは最もリソースを消費する種類のアプリケーションの 1 つであるため、XNA フレームワークの開発者は当然、ゲームに焦点が合っていないときにいくつかのフレームをドロップして、実行したい他の操作のために CPU を節約することをお勧めします。ゲームがバックグラウンドになっている間。

Drawまた、メイン ウィンドウが最小化されている場合、XNA ゲームは呼び出しを行いません。Update通話が途切れることはないと思います (間違っているかもしれませんが) 。

于 2013-02-22T20:06:26.783 に答える