2010-10-05 10 views
0

Toutes mes excuses pour le long message et j'espère que cela a du sens pour quelqu'un là-bas.Mise en œuvre d'un menu principal pour le jeu iPhone - comment revenir au menu principal?

J'ai écrit un jeu iPhone (en quartz 2d) qui utilise la structure suivante:

  • délégué App charge un contrôleur de vue appelé gameviewcontroller et sa vue associée
  • Dans la méthode "View a fait de charge" , le gameviewcontroller démarre et lance une classe Game Controller (NSObject). Il démarre également une minuterie sur une méthode "Game Loop" dans le contrôleur de jeu. Enfin, il indique au contrôleur de jeu d'utiliser la même vue que le contrôleur de jeu (qui est un UIView personnalisé).

Tout cela fonctionne très bien. J'essaie maintenant d'intégrer un menu principal pour le jeu. Jusqu'ici j'ai fait ce qui suit:

  • Créé un nouveau contrôleur de vue appelé "Menu principal" avec un NIB associé. Dans le NIB, j'ai créé mon menu principal avec un bouton "Démarrer".
  • Modifié le délégué de l'application pour charger la NIB Main Manu et afficher sa vue.
  • Définissez une méthode afin que lorsque vous appuyez sur le bouton, le gameviewcontroller (qui démarre effectivement la partie) soit chargé.

Jusqu'ici tout va bien - le fait d'appuyer sur le bouton «Démarrer» lance la partie. Mais .....

Le problème est maintenant que je ne peux pas trouver un moyen pour le contrôleur de jeu d'appeler la classe Menu principal (par exemple pour quand la partie est terminée). Je ne peux pas utiliser "self dismissModalViewController" car Game Controller est une classe NSObject et non un contrôleur de vue. Comment puis-je obtenir le contrôleur de jeu pour remonter mon menu principal?

Merci à tous pour la lecture,

Martin

Répondre

1

Si vous avez votre objet de menu vivant encore il suffit d'appeler son "dissmisModalViewController". par exemple [[MainMenu getInstance] dismissModalViewControllerAnimated: YES]; où getInstance renvoie votre objet ou l'a stocké dans GameController en tant que propriété, donc lorsque vous créez GameController à partir de votre MainMenu ou de GameViewController, assignez-vous lui-même comme sa propriété gameInstance.mainMenu = self;

Comment-faire méthode getInstance:

Vous pouvez soit utiliser un singleton (vous pouvez en obtenir un à partir du site dev Apple) ou si vous créez manuellement MainMenu vous pouvez simplement se rappeler de soi dans une variable globale et getInstance serait méthode de classe, quelque chose comme ça:

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

et la mise en œuvre

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

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

Hope this helps,

Krzysztof Zabłocki

+0

Krzysztof - merci - j'apprécie votre réponse. Pouvez-vous me préciser comment j'écrirais la méthode getInstance? – GuybrushThreepwood

+0

Droit - Je vais essayer un singleton - Je les ai déjà dans mon application.Si j'utilise ([[MainMenu getInstance] dismissModalViewController];) cela appellera-t-il le Menu du GameController? Il semble que ce serait le rejeter et ne pas l'appeler? – GuybrushThreepwood

+0

Si vous avez présenté votre GameViewController (qui a un GameController) de MainMenu alors vous pouvez appeler l'un des deux [mainMenu dismissModalViewControllerAnimated: YES] ou [gameViewController dismissModalViewControllerAnimated: YES] (puisque si appelé sur modalViewController lui-même il est transmis au parent) –