2009-02-27 4 views
0

J'ai une sous-classe NSWindow (GameWindow) contenant une sous-classe NSOpenGLView (GameView).Cocoa - Fenêtre modale avec l'animation de NSOpenGLView derrière elle

L'application est fenêtrée (ne passe pas en mode plein écran).

Une animation OpenGL dans GameView est déclenchée ~ 30 fois par seconde par une minuterie. Pour des raisons de présentation, l'animation GameView DOIT continuer indépendamment de ce qui se passe dans l'application. Le seul moment où il devrait s'arrêter est dans le cas d'une erreur fatale.

Je dois présenter diverses fenêtres Cocoa "modales" (par exemple, choisir un nouveau jeu, confirmer la fermeture, etc.) pendant que l'animation dans GameWindow se poursuit. Certains d'entre eux peuvent être des feuilles, mais les plus importants doivent apparaître sous la forme de fenêtres autonomes (complètes avec WebViews). MON QUESTION: comment puis-je afficher ces fenêtres "dialog" de telle sorte que mon timer d'application continue à se déclencher, mon animation continue, mais l'entrée de l'utilisateur dans GameWindow est bloquée jusqu'à ce que la fenêtre "dialog" soit fermée par le utilisateur?

(J'ai besoin de supporter Tiger + Leopard en ce moment).

Répondre

1

Avez-vous essayé les techniques de feuille/dialogue habituelles? Ils devraient bien fonctionner pour cette situation. Les minuteurs sont planifiés dans le cadre de la boucle d'exécution, qui ne s'arrête pas lorsque vous disposez d'une feuille modale ou d'une fenêtre. Elle devrait donc pouvoir continuer à s'afficher en arrière-plan pendant que les événements sont bloqués.

[NSApp beginSheet:sheetWindow modalForWindow:mainWindow modalDelegate:nil didEndSelector:NULL contextInfo:nil]; 

(Sauf remplir dans votre propre délégué et sélecteur fin si nécessaire.)

+0

Oh, je vois! J'avais cru qu'appeler -modalForWindow sur ma feuille ou fenêtre "de dialogue" bloquerait les deux temporisateurs et les événements à mon GameWindow jusqu'à ce que l'utilisateur ait rejeté la boîte de dialogue. Je vais essayer. Merci beaucoup pour votre aide Joel et votre réponse super rapide. –

0

Si vous voulez garder les fenêtres modales actuelles (sans passer à feuilles), vous pouvez essayer de planifier la NSTimer vous dans quelque chose Outre le mode de cycle de démarrage par défaut (NSDefaultRunLoopMode), qui se bloque dès que ce cycle s'arrête.

Questions connexes