Переключение между Monogame и UIKit

Я искал и искал, но, похоже, не могу найти решение, которое работает для того, что я пытаюсь сделать, и я почти нахожусь в той точке, где мне нужно спросить, возможно ли это вообще.

Я использую Xamarin Studio для разработки приложения для iOS. У меня есть несколько разных экранов, настроенных как UIViewControllers, и они хорошо работают. Однако суть приложения - это игра, и я хочу использовать Monogame, поскольку я использовал ее раньше и получал удовольствие от работы с ней.

По сути, мне нужно переключиться с UIViewController на класс Game. Я могу сделать это, просто создав новый объект Game и вызвав Run (), но я не могу понять, как выйти из игры, когда мне нужно, и вернуть управление обратно в UIViewController.

Кто-нибудь делал это в приложении? Я перепробовал все, что мог придумать, но, похоже, ничего не помогло. Это вообще возможно? Или мне нужно будет переделать это, чтобы Monogame обрабатывал все, даже все остальные вещи в приложении, которые не являются частью самой игры?

Спасибо!


person halterdev    schedule 05.05.2014    source источник
comment
Я точно не знаю, что вы пытаетесь сделать, но рассматривали ли вы возможность внедрения интерфейса в свой игровой класс?   -  person craftworkgames    schedule 05.05.2014
comment
У меня есть TabController. Одна из игр - это вкладка Game. После того, как эта вкладка будет нажата, появится несколько вариантов. Одна из них - это кнопка «Новая игра», с помощью которой я хочу запустить игровой объект. По окончании игры я хочу вернуться на вкладку «Игра», из которой пришел пользователь, и завершить работу с объектом «Игра».   -  person halterdev    schedule 05.05.2014


Ответы (1)


Есть пара хитрых способов, которые, как мне кажется, будут работать без модификации MonoGame.

1-й вариант:

  1. Когда ваше приложение запустится, запустите свой Game класс, как в обычной игре MonoGame.
  2. Чтобы отобразить контроллер, представьте его модально поверх игры
  3. Чтобы вернуться в игру, закройте модальный контроллер.

Так, например, чтобы показать контроллер:

var gameController = game.Services.GetService(typeof(UIViewController)) as UIViewController;
gameController.PresentViewController(new YourController(), true, null);

Тогда вы можете просто позвонить DismissViewController, чтобы скрыть это. Я использовал это для реализации материала Game Center.

К сожалению, вам придется изменить работу MonoGame, если вы хотите показать свою игру MonoGame после контроллера UIKit.

Другой вариант - добавить UIView поверх представления MonoGame. Что-то вроде этого:

var gameController = game.Services.GetService(typeof(UIViewController)) as UIViewController;
var view = new YourView();
gameController.View.AddSubview(view);

Вам нужно будет добавить некоторую логику, чтобы приостановить игру, если вы выберете этот маршрут. Я использовал эту опцию раньше для iAd и т. Д. Вы также можете сделать это с представлениями других контроллеров, например, с вашим примером контроллера вкладок выше.

person jonathanpeppers    schedule 07.05.2014
comment
Привет, извините за задержку с ответом. Мне придется попробовать ваш способ, потому что я просто не могу заставить его работать, используя сначала UIKit, а затем добавляя материал MonoGame. Однако у меня есть вопрос, как это сделать с памятью эффектов? Это так сильно увязло? - person halterdev; 16.05.2014
comment
Все должно быть хорошо. Просто убедитесь, что вы удалили и удалили из супервизора, когда больше не используете материалы UIKit. - person jonathanpeppers; 16.05.2014
comment
Этот ответ сработал для вас? Вы можете отметить время как ответ или добавить новый комментарий. Спасибо. - person jonathanpeppers; 06.08.2014