我有一个全屏Windows游戏,我正在努力。今天我看到一个独立游戏(在XNA中制作)具有以下行为:当它是焦点窗口时它将Update()
和Draw()
但是当它被最小化时它会停止这两个并等待用户再次将其作为顶部窗口。基本上我正在寻找一种方式来暂停"暂停"整个游戏循环,同时游戏窗口最小化,并且恢复"当游戏再次聚焦时,从哪里停止。这意味着如果我最小化我的游戏并打开我的浏览器,例如,当我左键单击时,游戏GUI逻辑将不会注册并打开窗口或其他任何东西。提前谢谢!
答案 0 :(得分:5)
你可以采取两种方式。
方法1:使用Game.IsActive
IsActive
将为false。所以你可以在Game1.cs的Update循环中做一些事情,比如
if (this.IsActive)
{
// update your game components
}
方法2:订阅Game.Activated
和Game.Deactivated
个活动。
每当游戏失去焦点时,都会引发Deactivated
事件。在那里你可以写一些代码来暂停一切。如果您有暂停菜单,这是启动暂停菜单的好地方。每当游戏获得焦点时,Activated
事件将被提升。你写了一些代码来取消你的游戏。
无论哪种方式,您只需要暂停更新,而不是绘制。如果查看Draw(),它会清除后备缓冲区并重新绘制每一帧的所有内容。如果Draw()暂停,您的游戏将显示为冻结状态。 Draw()不应该改变游戏的状态。