C#Monogame - 如何在游戏窗口最小化时停止游戏循环

Pow*_*ser 4 c# xna monogame

我有一个全屏Windows游戏,我正在努力.今天我看到一个独立游戏(在XNA中制作)具有以下行为:当它是聚焦窗口时它会Update(),Draw()但是当它被最小化时,它会停止这两个并等待用户再次使它成为顶部窗口.基本上我正在寻找一种方法来"暂停"整个游戏循环,同时游戏窗口被最小化,并游戏重新聚焦时停止的地方 "恢复"它.这意味着如果我最小化我的游戏并打开我的浏览器,例如,当我左键单击时,游戏GUI逻辑将不会注册并打开窗口或其他任何东西.提前致谢!

lib*_*ked 5

有两种方法可以做到.

方法1:使用 Game.IsActive

IsActive如果游戏没有焦点......或者最小化,那将是假的.所以你可以在Game1.cs的Update循环中做一些事情

if (this.IsActive) 
{
    // update your game components
}
Run Code Online (Sandbox Code Playgroud)

方法2:订阅Game.ActivatedGame.Deactivated事件.

每当游戏失去焦点时,Deactivated事件将被提升.在那里你可以写一些代码来暂停一切.如果您有暂停菜单,这是启动暂停菜单的好地方.每当游戏获得焦点时,Activated事件将被提升.你写了一些代码来取消你的游戏.

无论哪种方式,您只需要暂停更新,而不是绘制.如果查看Draw(),它会清除后备缓冲区并重新绘制每一帧的所有内容.如果Draw()暂停,您的游戏将显示为冻结状态.Draw()不应该改变游戏的状态.

  • 如果你的“Draw()”代码严格地绘制东西,那么它不会改变游戏的状态,因此不需要暂停 (2认同)