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.Activated
和 Game.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;
}
}
每次游戏获得或失去焦点时,都会调用方法 ActivateMyGame
和 DeactivateMyGame
。 属性 IAmActive
默认为false,这是和IsActive
.
的区别
我最近注意到 有时 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.Activated
和 Game.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;
}
}
每次游戏获得或失去焦点时,都会调用方法 ActivateMyGame
和 DeactivateMyGame
。 属性 IAmActive
默认为false,这是和IsActive
.