我只是想知道,在制作游戏时,我注意到当我的游戏具有焦点时,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
}
答案 0 :(得分:7)
我会尝试回答这个问题,而不是张贴“这就是它是怎么回事”。 XNA线程在失去焦点时会休眠。它是在XNA的游戏类中配置的。
InactiveSleepTime = new TimeSpan(0);
默认设置为20ms,将其设置为0将使XNA在失去焦点时全速运行。
IsRunningSlowly设置为true,因为帧速率低于60(这是设置IsFixedTimeStep时的默认值)
答案 1 :(得分:2)
这是设计的。游戏是最耗费资源的应用程序之一,所以当然XNA框架开发人员认为,当游戏不是焦点时,丢弃一些帧以保存一些CPU用于其他可能要执行的操作可能是一个好主意而游戏是在后台。
当XNA游戏的主窗口最小化时,它也不会进行Draw
次调用。我相信Update
来电永远不会掉线(虽然我可能错了)。