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