2010-08-14 4 views
1

Sur iOS si je souhaite superposer deux vues, puis fusionner d'une scène à l'autre.Sur iOS avec OpenGLES comment avoir plusieurs vues?

E.g .: Du menu d'un jeu au jeu réel. Avoir le menu d'abord, puis cliquez sur ("démarrer le jeu") charger la vue du jeu et avoir un bon mélange/transformer du menu à la scène du jeu.

Il ne s'agit pas d'une question spécifique pour le fondu mais pour savoir comment gérer plusieurs vues dans une application OpenGL. J'ai lu et joué avec quelques notions de base sur la façon de dessiner des lignes, des objets, des éclairs, des couleurs et similaires, mais je suis complètement vert lorsqu'il s'agit de tout assembler dans une application OpenGLES réelle (pas une vue statique). Je veux dire que vous devez utiliser des vues différentes, non? Ou est ce modèle de design avec différents viewcontrollers et vues que nous avons tous pris dans notre programmation UIKit de tous les jours pas applicable quand il s'agit d'OpenGLES? Parce que je ne peux tout simplement pas y arriver. Et je ne trouve aucun exemple.

Répondre

1

Eh bien, je trouve ce que je cherchais dans

Il vous donne des couches, des transitions de scène, prêt à partir des menus, des sprites, etc .. donc je me suis arrêté prendre la peine sur la façon de le faire et il suffit d'utiliser cocos à présent.

N'hésitez pas si vous êtes nouveau sur OpenGL aussi, cela vous facilitera la vie 147 fois. Et btw ... vous pouvez également le combiner avec 3d.

0

Si vous voulez avoir plusieurs vues OpenGL simultanément visibles dans votre application, sous forme de CAEAGLLayers, alors il est un point important à retenir:

[EAGLContext setCurrentContext:oglContext]

va changer le contexte, non seulement pour la vue en cours d'exécution, mais pour toutes les vues EAGL de votre application. Cela peut se manifester en faisant geler d'autres vues qui fonctionnaient, puisque les appels OpenGL vont maintenant à la dernière vue qui a fait le [EAGLContext setCurrentContext:oglContext]. Pour contourner ce problème, vous devez appeler le [EAGLContext setCurrentContext:oglContext] à chaque fois que votre instance de vue est appelée, avant de passer des appels OpenGL.

Dans mon application, je ne définissais le contexte qu'une seule fois, dans la vue initWithFrame. Cela a bien fonctionné pendant des années. Une fois que j'ai créé une seconde instance de cette vue, la première vue a cessé de se mettre à jour. Maintenant, je définis le contexte dans mes appels de mise à jour, avant de faire des appels CVOpenGLES.