2010-12-15 17 views
5

Pracuję nad aplikacją, w której chciałbym używać cocos2d na ekranie głównym aplikacji, ale nie gdzie indziej (w innych miejscach bardziej odpowiednie są standardowe pliki UIKit). Tak, mam ustawiony EAGLView jako widok główny w kontrolerze UINavigationController, a kiedy użytkownik kliknie we właściwym miejscu, wciskam nowy kontroler widoku na kontroler nawigacyjny.Problemy z cocos2d i UINavigationController

To działa świetnie, jak dotąd. Cocos2d/chipmunk stuff w widoku domowym działa świetnie, przesuwając nowy kontroler widoku działa zgodnie z oczekiwaniami.

Ale kiedy wracam do widoku domu, nic tam nie ma. Wszystko, co widzę, to tło okna i pasek nawigacyjny.

Ustawiam punkt przerwania w widoku kontrolera widoku głównego - viewDidAppear: aby zobaczyć, co się dzieje po pop, i jak dotąd wszystko wydaje się być normalne (lub przynajmniej takie samo, jak przed naciśnięciem).

Push jest tylko standardowym urządzeniem nawigacyjnym. Nie widzę żadnych ostrzeżeń o pamięci. Ktoś myśli o tym, co się dzieje?

Jest to prosty projekt demo, który pokazuje to zachowanie w http://cl.ly/1Q050s0h2k47032K1Y1N

ten jest oparty na szablonie projektu Cocos2d + burunduka. Stuknij w Grossini, a nowy kontroler widoku zostanie wciśnięty na stos. Kliknij przycisk Wstecz, a Grossini zniknął.

I tylko po to, aby było ciekawie, problem ten występuje tylko na urządzeniu z systemem iOS (używam wersji 4.1), a nie w symulatorze.

+0

wątpię, to jest problem, ale masz wyciek tych dwóch facetów: http://cl.ly/1J26180i383F3H0z3V2L –

+0

nawet nie jestem pewien, co to jest, ale nie wyglądają na powiązane. –

+0

Znalazłem, że jeśli mój -viewDidLoad dzwoni -setNeedsLayout w widoku EAGL, obiekty cocos2d są przywracane, a widok główny jest widoczny po wyskoczeniu kontrolera nawigacyjnego do katalogu głównego. Istnieje jednak zauważalny migotanie - przez chwilę obiekty cocos2d nie są widoczne, ale potem pojawiają się. Zmodyfikowana wersja mojego demo, która je zawiera, jest dostępna pod adresem http://cl.ly/1L423a1x27373t1q0s0y To wygląda jak postęp, ale to paskudne migotanie. –

Odpowiedz

6

Rozwiązałem twój problem. Musisz wykonać kilka kroków w swoim kodzie.

W pliku końcówki RootViewController zmień widok Tożsamość z HomeView na UIView.

Tworzenie główna Zobacz obiekt na RootViewController klasy

@interface RootViewController : UIViewController { 
    HomeView *homeViewObj; 
} 

w pliku RootViewController.m w metodzie viewDidLoad dodać ten kod

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

i zastąpić ten kod w swoim sposobie viewDidLoad w wymaganym miejscu.

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]; 

Następnie problem zostanie rozwiązany, wszystko co najlepsze.

Pozdrawiam,

Satya

+0

Dziękuję, że naprawili problem. Nie do końca jednak rozumiem dlaczego. Czy możesz to w ogóle wyjaśnić? –

+0

Tom, wykonałem twój kod i przetestowałem go. Znalazłem jedną rzecz, kiedy wrócisz do widoku głównego, to nie pokazuje "EAGLView", ale wykrywa dotknięcia i wykonuje operacje. W momencie dwukrotnego stuknięcia widok został przesłany do kontrolera 2ndView, a następnie kliknę z powrotem, a następnie wyświetli się EAGLView. Wtedy zrozumiałem, że niektóre widoki są nakładane na "EAGLView", więc ustawiłem normalny widok w InterfaceBuilder i dodałem EAGLView jako widok podrzędny. Następnie problem rozwiązany – Satya

+0

Hej! Szukałem tego samego, Thanx Satya –

Powiązane problemy