XNA 属性 Game.IsActive 不工作

XNA property Game.IsActive is not working

我最近注意到 有时 XNA 属性 Game.IsActive 并不总是正确反映游戏状态 window。

更具体地说,Game.IsActive = true 即使游戏 window 显然不活跃(例如,顶部的 window 条显示为不活跃)。我可以使用活动的 Firefox window 重现此行为,与游戏 window 稍微重叠。

这可能是什么问题?

根据要求,这张图显示了问题:

游戏 window 在后台,浏览器(显示 Stack Overflow)在前台(并且处于活动状态),但是 属性 Game.IsActive 是真的(因为你在 visual studio 输出(洋红色 "circle")中查看每个 Update() 都被写出。

我在我的核心游戏 class 中创建 XNA class Game 的静态引用并使用它会不会是个问题?

如评论中所述,IsActive-属性 有其弱点。

您应该订阅事件 Game.ActivatedGame.Deactivated。在启动时额外关注 window,你会没事的。

恕我直言:我不喜欢像 IsActive 这样的 "magic" 属性。事件更加精确..

示例:

public class MyGame : Game
{
   public MyGame()
   {
      // Should move to Initialize-method..
      this.Activated += ActivateMyGame;
      this.Deactivated += DeactivateMyGame;
      this.IAmActive = false;
      // do you init-stuff

      // bring you window to front. After this point the "Game.IsActive"
      // will be set correctly, while IAmActive is correct from the beginning.
   }

   public bool IAmActive { get; set; }

   public void ActivateMyGame(object sendet, EventArgs args)
   {
      IAmActive = true;
   }

   public void DeactivateMyGame(object sendet, EventArgs args)
   {
      IAmActive = false;
   }
}

每次游戏获得或失去焦点时,都会调用方法 ActivateMyGameDeactivateMyGame。 属性 IAmActive默认为false,这是和IsActive.

的区别