Я портирую игру XNA на iOS, используя MonoGame и VisualStudio для Mac.В исходном исходном коде я использовал PhoneApplicationService
для управления жизненным циклом приложения:
PhoneApplicationService.Current.Launching += OnGameLaunching;
PhoneApplicationService.Current.Closing += OnGameClosing;
PhoneApplicationService.Current.Deactivated += OnGameDeactivated;
PhoneApplicationService.Current.Activated += OnGameActivated;
Я использовал PhoneApplicationService
в классе, производном от Microsoft.Xna.Framework.Game
, чтобы я мог управлять жизненным циклом с событиями внутри игрыloop.
Чтобы портировать игру на 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()
, когда приложение переходит в фоновое состояние или когда возвращается в активное состояние соответственно.