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

实现iPhone游戏的主菜单-如何返回主菜单?,iphone,xcode,uiviewcontroller,quartz-2d,Iphone,Xcode,Uiviewcontroller,Quartz 2d,我为这篇冗长的帖子道歉,我希望这对其他人来说是有意义的 我编写了一个iPhone游戏(Quartz 2d),它使用以下结构: App delegate加载名为gameviewcontroller的视图控制器及其关联视图 在“查看确实加载”方法中,gameviewcontroller启动并启动游戏控制器类(NSObject)。它还启动游戏控制器中“游戏循环”方法的计时器。最后,它告诉游戏控制器使用与gameview控制器相同的视图(这是一个自定义UIView) 这一切都很好。我现在正在尝试集成

我为这篇冗长的帖子道歉,我希望这对其他人来说是有意义的

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

  • App delegate加载名为gameviewcontroller的视图控制器及其关联视图
  • 在“查看确实加载”方法中,gameviewcontroller启动并启动游戏控制器类(NSObject)。它还启动游戏控制器中“游戏循环”方法的计时器。最后,它告诉游戏控制器使用与gameview控制器相同的视图(这是一个自定义UIView)
这一切都很好。我现在正在尝试集成游戏的主菜单。到目前为止,我已经做了以下工作:

  • 创建了一个名为“主菜单”的新视图控制器,该控制器带有一个关联的NIB。在NIB中,我创建了带有“开始”按钮的主菜单
  • 更改应用程序委托以加载主Manu NIB并显示其视图
  • 设置一种方法,以便按下按钮后加载gameviewcontroller(有效启动游戏)
到目前为止还不错-按下“开始”按钮开始游戏。但是

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

谢谢大家的阅读


Martin

如果您的菜单对象仍然存在,只需调用其“dissmisModalViewController”。 例如[[main menu getInstance]dismissModalViewControllerAnimated:YES];其中getInstance返回您的对象或将其作为属性存储在GameController中,因此当您从主菜单或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;
希望这有帮助


Krzysztof Zabłocki

Krzysztof-谢谢你-我感谢你的回答。你能为我澄清一下我将如何编写getInstance方法吗?好的-我将尝试一个单例-我的应用程序中已经有了这些方法。如果我使用([[MainMenu getInstance]dismissModalViewController];),这会从GameController调用菜单吗?看起来会将其关闭而不会调用?如果您从主菜单中显示GameViewController(其中包含一些GameController),则可以调用两个[Main Menu DismissModalViewController激活:是]或[GameViewController DismissModalViewController激活:是](因为如果在modalViewController上调用,它会被转发到父级)这样我就可以从GameController上调用[GameViewController dismissModalViewControllerAnimated:YES]?它认为我昨天尝试了这个,得到了“GameViewController可能不会响应dismissModalViewController”-它也拒绝编译。我将尝试通过[Main Menu dismissModalViewControllerAnimated:是]。感谢您的帮助。