如何检测用户何时在停用时再次运行WP7 XNA应用程序?

时间:2013-12-15 06:22:46

标签: c# windows-phone-7 xna windows-phone windows-phone-7.1

我在C#中使用XNA 4.0编写了一个Windows Phone 7游戏。

如果用户执行以下操作,似乎可以避免使用Game.OnExiting方法:

  1. 在Windows Phone OS中通过Tile开始游戏。
  2. 在游戏过程中,按下WINDOWS按钮离开游戏(调用Game.OnDeactivated但不调用Game.OnExiting)。
  3. 用户通过Windows Phone OS中的Tile重新启动游戏。
  4. 我已经阅读了很多关于WP7应用程序生命周期的内容,但是在用户连续两次运行相同应用程序的情况下无法找到任何内容。

    我有一些逻辑,只有在游戏关闭时调用才有意义,并且重要的是它不会错过(例如上面的情况)。我无法在OnDeactivated中调用它,因为它会导致糟糕的用户体验。

    这是有问题的代码(在我的Game类实现中找到):

    protected override void OnExiting(object sender, EventArgs args)
    {
        // This is what is getting missed!
        ForceSave();
    
        base.OnExiting(sender, args);
    }
    
    protected override void OnDeactivated(object sender, EventArgs args)
    {
        base.OnDeactivated(sender, args);
    
        // I don't want to put ForceSave here because it will get called even if the user is not exiting the game.
    
        ...
    }
    
    protected override void OnActivated(object sender, EventArgs args)
    {
        base.OnActivated(sender, args);
    
        ...
    }
    

1 个答案:

答案 0 :(得分:0)

我认为你不能处理这种情况 我不知道你的游戏是什么,但最简单的解决方案是在关卡结束时或在显示另一个菜单之前调用ForceSave(我认为这是一种保存方法),你无法保存用户的进度仅在关闭申请之前。有时游戏可能会毫无理由地崩溃,你必须防止这种情况发生 简而言之,您必须修改保存逻辑。