【问题标题】:Application Lifecycle for Xamarin.iOSXamarin.iOS 的应用程序生命周期
【发布时间】:2019-04-01 07:42:14
【问题描述】:

我正在使用 MonoGame 和 VisualStudio for Mac 将 XNA 游戏移植到 iOS。在原始源代码中我使用PhoneApplicationService 来管理应用程序生命周期:

PhoneApplicationService.Current.Launching += OnGameLaunching;
PhoneApplicationService.Current.Closing += OnGameClosing;
PhoneApplicationService.Current.Deactivated += OnGameDeactivated;
PhoneApplicationService.Current.Activated += OnGameActivated;

我在派生自Microsoft.Xna.Framework.Game 的类中使用了PhoneApplicationService,这样我就可以通过游戏循环中的事件来管理生命周期。

要将游戏移植到 iOS,我知道我需要使用 UIKit 并像这样提供 AppDelegate(以下代码来自 Xamarin 示例):

[Register("AppDelegate")]
class Program : UIApplicationDelegate
{
    private static Game1 game;

    static void Main(string[] args)
    {
        UIApplication.Main(args, null, "AppDelegate");
    }

    public override void FinishedLaunching(UIApplication app)
    {
        game = new Game1();
        game.Run(); // does not return until the game doesn't end
    }

    public override void OnResignActivation(UIApplication application)
    { 
        // pause the stopwatch
        ...
    }

    public override void OnActivated(UIApplication application)
    { 
        // resume the stopwatch
        ...
    }
}

在上面的代码中,Microsoft.Xna.Framework.Game.Run()FinishedLaunching() 中被调用,并且仅在游戏真正结束时才返回。话虽如此,我想知道当应用程序进入后台状态或移回活动状态时,OnResignActivation()OnActivated() 是否仍然被调用。

【问题讨论】:

  • Microsoft.Xna.Framework.Game.Run() in FinishedLaunching() only returns when the game ends 是什么意思? FinishedLaunching 在应用程序启动后调用以配置主窗口和视图控制器。它是应用程序的开始而不是结束。
  • Microsoft.Xna.Framework.Game.Run() 执行游戏循环并且不返回......所以我想知道如何处理其他事件,如 OnActivated 或 DidEnterBackground。我错了吗?

标签: c# ios xamarin xna monogame


【解决方案1】:

我创建了一个小型测试应用程序,我确认 OnResignActivation()OnActivated() 被调用,即使 game.Run() 直到游戏没有结束才会返回。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 2011-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多