我最近注意到有时 XNA属性Game.IsActive并不总是正确反映游戏窗口的状态。
更具体地,Game.IsActive = true
即使游戏窗口明显不活动(例如,顶部窗口栏被着色为不活动)。我可以使用与游戏窗口稍微重叠的活动Firefox窗口重现此行为。
这可能是什么问题?
游戏窗口在后台,浏览器(显示Stack Overflow)位于前台(并且处于活动状态),但属性Game.IsActive为true(正如您在visual studio输出中看到的那样(洋红色“圆圈”)每个Update()都写出来。
这是一个问题,我在我的核心游戏类中创建了XNA类游戏的静态引用并使用它?
答案 0 :(得分:1)
正如评论中所提到的,IsActive
- 财产有它的弱点。
您应订阅活动Game.Activated
和Game.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;
}
}
每次游戏获得或失去焦点时,都会调用方法ActivateMyGame
和DeactivateMyGame
。默认情况下,属性IAmActive
为false,这与IsActive
不同。