2010-12-15 3 views
5

Sto lavorando a un'app in cui mi piacerebbe utilizzare cocos2d nella schermata principale dell'app, ma non altrove (in altri luoghi la roba UIKit standard è più appropriata). Quindi, ho impostato EAGLView come root view in un UINavigationController, e quando l'utente tocca nel posto giusto spingo un nuovo controller di visualizzazione sul controller nav.cocos2d e UINavigationController trouble

Questo funziona benissimo, finora. La roba cocos2d/chipmunk nella vista home funziona alla grande, spingendo un nuovo controller di visualizzazione a funzionare come previsto.

Ma quando ritorno alla visualizzazione iniziale, non c'è niente. Tutto quello che vedo sono lo sfondo della finestra e la barra di navigazione.

Ho impostato un punto di interruzione nel controller della vista radice -viewDidAppear: per vedere cosa succede dopo il pop, e finora tutto sembra normale (o almeno lo stesso come lo era prima del push).

La spinta è solo una spinta del controller nav standard di bog. Non vedo alcun tipo di avviso di memoria. Qualcuno ha pensieri su cosa sta succedendo?

C'è un progetto semplice demo che mostra questo comportamento a http://cl.ly/1Q050s0h2k47032K1Y1N

Questo è basato sul modello di progetto cocos2d + chipmunk. Tocca su Grossini e un nuovo controller di visualizzazione viene inserito nello stack. Tocca il pulsante Indietro e Grossini non c'è più.

E solo per renderlo interessante, questo problema esiste solo su un dispositivo iOS (sto utilizzando 4.1), non nel simulatore.

+0

dubito che questo è il problema, ma si sta perdendo questi due ragazzi: http://cl.ly/1J26180i383F3H0z3V2L –

+0

Io non sono nemmeno sicuro di quello che quelle sono, ma non sembrano correlati. –

+0

Ho scoperto che se myviewnapad chiama call -setNeedsLayout su EAGLview, gli oggetti cocos2d vengono ripristinati e la vista principale è visibile dopo che il controller di navigazione viene visualizzato come root. C'è uno sfarfallio evidente, sebbene-- per un momento, gli oggetti cocos2d non siano visibili, ma poi appaiono. Una versione modificata del mio demo che incorpora questo è http://cl.ly/1L423a1x27373t1q0s0y Questo sembra un progresso ma è un brutto guizzo. –

risposta

6

Ho risolto il problema. Devi seguire alcuni passaggi nel tuo codice.

Nel file di pennino RootViewController, modificare la vista Identità da HomeView a UIView.

creare una casa Visualizza oggetto nel RootViewController Classe

@interface RootViewController : UIViewController { 
    HomeView *homeViewObj; 
} 

nel file di RootViewController.m nel metodo viewDidLoad aggiungere questo codice

homeViewObj = [[HomeView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)]; 
[self.view addSubview:homeViewObj]; 

e sostituire questo codice nel metodo viewDidLoad al punto desiderato.

CCDirector *director = [CCDirector sharedDirector]; 

    // attach the openglView to the director 
    [director setOpenGLView:(EAGLView *)homeViewObj]; 

    [director setDeviceOrientation:kCCDeviceOrientationPortrait]; 
    [director setAnimationInterval:1.0/60]; 
    [director setDisplayFPS:YES]; 

Quindi il problema sarà risolto, tutto il meglio.

saluti,

Satya

+0

Grazie, questo ha risolto il problema. Non capisco completamente perché, però. Puoi spiegarlo a tutti? –

+0

Tom, ho eseguito il codice e l'ho provato, ho trovato una cosa, quando torni a casa View, non mostra "EAGLView" ma sta rilevando i tocchi e sta eseguendo le operazioni. Al momento del doppio tocco, la vista è passata a 2ndView Controller, quindi faccio clic su di nuovo, quindi viene visualizzato EAGLView. Poi ho capito che qualche vista è sovrapposta a "EAGLView", quindi ho inserito la vista normale in InterfaceBuilder e aggiunto EAGLView come vista secondaria. Quindi il problema è stato risolto – Satya

+0

Hey !! Stavo cercando lo stesso, Thanx Satya –