【问题标题】:Implementing a main menu for iPhone game - how to get back to the Main Menu?为 iPhone 游戏实现主菜单 - 如何返回主菜单?
【发布时间】:2010-10-05 18:46:43
【问题描述】:

为这篇长文道歉,我希望它对那里的人有意义。

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

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

这一切都很好。我现在正在尝试为游戏集成主菜单。到目前为止,我已经完成了以下工作:

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

到目前为止一切顺利 - 按下“开始”按钮开始游戏。但是.....

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

感谢大家的阅读,

马丁

【问题讨论】:

    标签: iphone xcode uiviewcontroller quartz-2d


    【解决方案1】:

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

    getInstance方法的制作方法:

    您可以使用单例模式(您可以从苹果开发网站获得),或者如果您手动创建 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 调用菜单吗?看起来这会忽略它而不是调用它?
    • 如果你从 MainMenu 展示了你的 GameViewController (其中有一些 GameController ),那么你可以调用两个 [mainMenu dismissModalViewControllerAnimated:YES] 或 [gameViewController dismissModalViewControllerAnimated:YES] (因为如果在 modalViewController 本身上调用它会得到转发给父母)
    • 所以我可以从 GameController 调用 [GameViewController dismissModalViewControllerAnimated : YES] 吗?它认为我昨天尝试过这个并得到“GameViewController 可能无法响应dismissModalViewController” - 它也拒绝编译。
    • 我会尝试通过 [mainMenu dismissModalViewControllerAnimated : YES] 调用它。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多