Как правильно должна выглядеть простая игровая архитектура? - PullRequest
0 голосов
/ 25 июня 2011

В настоящее время я пытаюсь построить игру с UIkit, которая состоит из трех MVC (на данный момент): основной класс делегата приложения (со свойством UINavigationController), класс меню (UIViewController с файлом xib) и класс игрового контента (также UIViewController с XIB-файлом). Очевидно, что в игре нужны методы для загрузки игрового состояния, подготовки к игре, приостановки игры и сохранения игрового состояния. ИМХО, эти методы относятся к игровому контенту MVC, поэтому я их и положил туда.

Теперь все понятно, когда процесс плоский: приложение запускается, контроллер навигации инициализируется, появляется всплывающее меню, вы нажимаете кнопку, игра запускается. Но я пытаюсь понять, как справиться с ситуацией, когда игровое приложение входит в фоновый режим или завершает работу. Я вижу эти хорошие методы, такие как «applicationDidBecomeActive», «applicationWillResignActive», «applicationWillTerminate», в основном файле класса делегата приложения, и я считаю, что моя архитектура игрового приложения должна быть спроектирована таким образом, чтобы использовать эти методы для подготовки игры. Каково ваше мнение, нужно ли мне иметь свойство (указывающее на класс игрового контента) в классе делегата основного приложения, чтобы получить доступ к методам подготовки к игре? Или я должен изменить дизайн моего игрового контента MVC?

Обновление: мой класс игрового контента выделяется, инициализируется и присваивается основному свойству игрового приложения (для приостановки, сохранения состояния и т. Д. В applicationWillResignActive, applicationDidBecomeActive ...). Основные методы класса делегата приложения будут обрабатывать все подготовительные материалы. Кроме того, мой класс меню также указывает (имеет свойство) на тот же объект игрового контента, потому что у меня есть кнопки «новая игра», «возобновить игру» в меню. Теперь, как мне перезапустить игру из главного меню кнопкой «Новая игра»? Я хотел бы «удалить» объект игрового контента и затем выделить / инициализировать новый. Но проблема в том, что если я освобождаю старый и размещаю / инициализирую новый объект игрового контента из класса меню (и назначаю свойство класса меню), то как я могу передать ссылку на этот объект в основной класс делегата приложения? ? Должен ли я иметь указатель на основной объект делегата приложения из моего свойства объекта меню? Я полагаю, что игровой контент должен быть похож на одиночный ...

Ответы [ 2 ]

2 голосов
/ 25 июня 2011

Вы совершенно правы, когда хотите использовать сигналы UIApplicationDelegate, для этого они и нужны. Например:

-(void)applicationDidBecomeActive:(UIApplication*)app {
  [my_game resume]; // ...or whatever
}
-(void)applicationWillResignActive:(UIApplication*)app {
  [my_game suspend]; // ...or whatever
}

Вам не нужно ничего менять в игровом контенте, чтобы адаптироваться к этому (если только вы не сделали по-настоящему паршивую работу с самого начала!). Обязательно инициализируйте игровой контент в -application:didFinishLaunchWithOptions:.

0 голосов
/ 27 июня 2011

Недавно я нашел удобный способ получить ссылку на основной объект делегата приложения для перезапуска (и запуска) игрового процесса - игрового контента MVC. Вот код метода моего класса меню, который перезапускает / запускает игровой контент:

-(IBAction) newGame{

  GameContentViewController *gcvc = [[GameContentViewController alloc] init];
  self.gameContentViewController = gcvc;
  MyAppDelegate *myApp = [[UIApplication sharedApplication] delegate];
  myApp.gameContentViewController = gcvc; //cia bus retain'intas referencas
  [gcvc release];
  [self.navigationController pushViewController:self.gameContentViewController animated:YES];
}

Я сохраняю содержимое игрового объекта только в основном свойстве делегата приложения. Свойство menu, которое содержит ссылку на общий игровой объект, имеет только атрибут assign. Я подумал, что будет достаточно, чтобы владелец игрового контента был только основным делегатом приложения. Я не уверен в чистоте своей архитектуры приложения (объекты основного делегата и класса меню содержат ссылки на один и тот же объект игры через свойства), но я сдался, потому что у меня нет других идей :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...