【发布时间】: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