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

标签 c# xna monogame

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

最佳答案

两种方法。

方法一:使用Game.IsActive

如果游戏没有焦点...或最小化,

IsActive 将为 false。所以你可以在你的 Game1.cs 的更新循环中做一些事情,比如

if (this.IsActive) 
{
    // update your game components
}

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

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

无论哪种方式,您只需要暂停更新,而不是绘制。如果查看 Draw(),它会清除后备缓冲区并每帧重新绘制所有内容。如果 Draw() 被暂停,您的游戏将出现卡住状态。 Draw() 不应改变游戏的状态。

关于C# Monogame - 如何在游戏窗口最小化时停止游戏循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36071628/

相关文章:

C# html 表单元素数组

c# - 每次调用 Equals 都会返回 false,即使值相同 (C#)

xamarin.ios - 使用 Xamarin 移植 Windows Phone 游戏

c# - API 不可知 Vector3、Matrix 等?

c# - 我如何在 Monogame 项目中实现 Awesomium 1.7.4.2?

c# - 根据分辨率缩放屏幕上的所有 Sprite

c# - 测试字符串中的所有可能性

c# - 如何在启动时将表单加载更改为其他表单?

java - 如何用 Java 编写这个用 C# 编写的逻辑? C#中的返回值类型有哪些?

c# - 为什么这个循环不规范化我的 Vector2 列表?