Реализация главного меню для игры для iPhone - как вернуться в главное меню? - PullRequest
0 голосов
/ 05 октября 2010

Извиняюсь за длинный пост, и я надеюсь, что это имеет смысл для кого-то там.

Я написал игру для iPhone (в Quartz 2d), в которой используется следующая структура:

  • Делегат приложения загружает контроллер представления, называемый gameviewcontroller, и связанный с ним вид
  • В методе «Просмотр загружен» запускается игровой контроллер и запускается класс игрового контроллера (NSObject). Он также запускает таймер для метода «Game Loop» в игровом контроллере. Наконец, он говорит игровому контроллеру использовать то же представление, что и у игрового контроллера (который является пользовательским UIView).

Это все отлично работает. Я сейчас пытаюсь интегрировать главное меню для игры. До сих пор я сделал следующее:

  • Создан новый View Controller под названием «Главное меню» со связанным NIB. В NIB я создал главное меню кнопкой «Пуск».
  • Изменен делегат приложения, чтобы загрузить основной Manu NIB и отобразить его представление.
  • Установите метод так, чтобы при нажатии кнопки он загружал игровой контроллер (который эффективно запускает игру).

Пока все хорошо - нажатие кнопки «Старт» запускает игру. Но .....

Проблема в том, что теперь я не могу найти способ, которым игровой контроллер может вызывать класс главного меню (например, когда игра заканчивается). Я не могу использовать «self dismissModalViewController», так как Game Controller является классом NSObject, а не контроллером представления. Как я могу заставить игровой контроллер открыть главное меню?

Спасибо всем за чтение,

Martin

1 Ответ

1 голос
/ 05 октября 2010

Если ваш объект меню еще жив, просто вызовите его "dismisModalViewController".например [[MainMenu getInstance] dismissModalViewControllerAnimated: YES];где getInstance возвращает ваш объект или хранит его в GameController как свойство, поэтому, когда вы создаете GameController из своего MainMenu или GameViewController, просто назначаете себя в качестве его свойства gameInstance.mainMenu = self;

Как создать метод getInstance:

Вы можете либо использовать шаблон Singleton (вы можете получить его с сайта Apple Dev), либо, если вы создадите MainMenu вручную, вы можете просто запомнить себя в некоторой глобальной переменной, а getInstance будет методом класса, что-то вроде этого:

@interface MainMenu : UIViewController 
{ 
} 
+ (MainMenu*) getInstance; 
@end 

и в реализации

MainMenu *singleInstance; 
@implementation MainMenu 
- (id)init 
   { 
     if((self = [super init])) 
     { 
       singleInstance = self; 
     } return self; 
    } 

 + (MainMenu*)getInstance 
 { 
    return singleInstance; 
 } 
@end;

Надеюсь, это поможет,

Кшиштоф Заблоцкий

...