XNA属性Game.IsActive无效

时间:2017-11-16 03:16:39

标签: c# windows xna xna-4.0

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

更具体地,Game.IsActive = true即使游戏窗口明显不活动(例如,顶部窗口栏被着色为不活动)。我可以使用与游戏窗口稍微重叠的活动Firefox窗口重现此行为。

这可能是什么问题?

根据要求,此图显示了问题: enter image description here

游戏窗口在后台,浏览器(显示Stack Overflow)位于前台(并且处于活动状态),但属性Game.IsActive为true(正如您在visual studio输出中看到的那样(洋红色“圆圈”)每个Update()都写出来。

这是一个问题,我在我的核心游戏类中创建了XNA类游戏的静态引用并使用它?

1 个答案:

答案 0 :(得分:1)

正如评论中所提到的,IsActive - 财产有它的弱点。

您应订阅活动Game.ActivatedGame.Deactivated。在启动时关注窗口,你会没事的。

恕我直言:我不喜欢像IsActive这样的“神奇”属性。事件要精确得多......

示例:

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不同。