实现iPhone游戏的主菜单 - 如何返回主菜单?

时间:2010-10-05 09:15:48

标签: iphone xcode uiviewcontroller quartz-2d

为长篇文章道歉,我希望对那里的某些人有所帮助。

我编写了一款iPhone游戏(在Quartz 2d中),它使用以下结构:

  • App委托加载名为gameviewcontroller及其关联视图的视图控制器
  • 在“View did load”方法中,gameviewcontroller启动并启动游戏控制器类(NSObject)。它还在游戏控制器中的“游戏循环”方法上启动计时器。最后它告诉游戏控制器使用与游戏视图控制器相同的视图(这是一个自定义的UIView)。

一切正常。我现在正在尝试整合游戏的主菜单。到目前为止,我已经完成了以下工作:

  • 创建了一个名为“Main Menu”的新视图控制器,其中包含一个关联的NIB。在NIB中,我使用“开始”按钮创建了我的主菜单。
  • 更改应用程序委托以加载Main Manu NIB并显示其视图。
  • 设置方法,以便在按下按钮时加载gameviewcontroller(有效启动游戏)。

到目前为止一直很好 - 按下“开始”按钮开始游戏。但.....

现在的问题是我找不到游戏控制器调用主菜单类的方法(例如游戏结束时)。我不能使用“self dismissModalViewController”,因为Game Controller是一个NSObject类而不是视图控制器。如何让游戏控制器拉出我的主菜单?

感谢大家的阅读,

马丁

1 个答案:

答案 0 :(得分:1)

如果你的菜单对象仍然存在,只需调用它的“dissmisModalViewController”。 例如[[MainMenu getInstance] dismissModalViewControllerAnimated:YES];其中getInstance返回您的对象或将其作为属性存储在GameController中,因此当您从MainMenu或GameViewController创建GameController时,只需将其自身指定为其属性gameInstance.mainMenu = self;

如何制作getInstance方法:

你可以使用Singleton模式(你可以从apple dev网站获得一个)或者如果你手动创建MainMenu你可以在一些全局变量中记住self,而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;

希望这有帮助,

KrzysztofZabłocki