C# Monogame - 如何在游戏 window 最小化时停止游戏循环
C# Monogame - How to stop game loop while the game window is minimized
我正在开发一款全屏 Windows 游戏。今天我看到一个独立游戏(在 XNA 中制作)有以下行为:当它是焦点 window 时它会 Update()
和 Draw()
但是当它被最小化时它会停止这两个并等待用户再次使其成为顶部 window。本质上,我正在寻找一种方法来 "pause" 整个游戏循环,同时游戏 window 被最小化并且 "resume" 它 从它停止的地方开始 当游戏再次聚焦时。这意味着如果我最小化我的游戏并打开我的浏览器,例如,当我左键单击时,游戏 GUI 逻辑不会注册并打开 window 或其他任何内容。提前致谢!
有两种方法可以做到。
方法一:使用Game.IsActive
如果游戏没有焦点...或最小化,IsActive
将为假。所以你可以在 Game1.cs 的更新循环中做一些事情,比如
if (this.IsActive)
{
// update your game components
}
方法 2:订阅 Game.Activated
和 Game.Deactivated
事件。
每当游戏失去焦点时,Deactivated
事件就会被触发。在那里你可以写一些代码来暂停一切。如果您有暂停菜单,这是启动暂停菜单的好地方。每当游戏获得焦点时,都会引发 Activated
事件。您编写了一些代码来取消暂停游戏。
无论哪种方式,您只需要暂停更新,而不是绘制。如果查看 Draw(),它会清除后备缓冲区并每帧重新绘制所有内容。如果 Draw() 被暂停,您的游戏将出现冻结状态。 Draw() 不应改变游戏状态。
我正在开发一款全屏 Windows 游戏。今天我看到一个独立游戏(在 XNA 中制作)有以下行为:当它是焦点 window 时它会 Update()
和 Draw()
但是当它被最小化时它会停止这两个并等待用户再次使其成为顶部 window。本质上,我正在寻找一种方法来 "pause" 整个游戏循环,同时游戏 window 被最小化并且 "resume" 它 从它停止的地方开始 当游戏再次聚焦时。这意味着如果我最小化我的游戏并打开我的浏览器,例如,当我左键单击时,游戏 GUI 逻辑不会注册并打开 window 或其他任何内容。提前致谢!
有两种方法可以做到。
方法一:使用Game.IsActive
IsActive
将为假。所以你可以在 Game1.cs 的更新循环中做一些事情,比如
if (this.IsActive)
{
// update your game components
}
方法 2:订阅 Game.Activated
和 Game.Deactivated
事件。
每当游戏失去焦点时,Deactivated
事件就会被触发。在那里你可以写一些代码来暂停一切。如果您有暂停菜单,这是启动暂停菜单的好地方。每当游戏获得焦点时,都会引发 Activated
事件。您编写了一些代码来取消暂停游戏。
无论哪种方式,您只需要暂停更新,而不是绘制。如果查看 Draw(),它会清除后备缓冲区并每帧重新绘制所有内容。如果 Draw() 被暂停,您的游戏将出现冻结状态。 Draw() 不应改变游戏状态。