cocos2d 2.0-rc2: Beende den Director und starte neu
Ich habe ein cocos2d-basiertes Spiel, das UIKit-Menüs verwendet. Daher verwende ich nur das Framework für einen Viewcontroller, also das Spiel selbst. Außerdem hat es nur eine Szene. Seit cocos2d 2.0 ist der Regisseur selbst einUIViewController
Unterklasse, also schiebe ich es einfach in meineMenuViewController
Wenn der Benutzer auf eine Starttaste tippt:
-(void)startGameButtonPressed {
CCDirectorIOS* director = (CCDirectorIOS *) [CCDirector sharedDirector];
// Create an CCGLView with a RGB565 color buffer, and a depth buffer of 0-bits
self.glView = [CCGLView viewWithFrame:CGRectMake(0, 0, 480, 320)
pixelFormat:kEAGLColorFormatRGB565 //kEAGLColorFormatRGBA8
depthFormat:0 //GL_DEPTH_COMPONENT24_OES
preserveBackbuffer:NO
sharegroup:nil
multiSampling:NO
numberOfSamples:0];
// attach the openglView to the director
[director setView:glView];
[director runWithScene:[GameLayer scene]];
[director setDelegate:(id <CCDirectorDelegate>) [[UIApplication sharedApplication] delegate]];
[self.navigationController pushViewController:director animated:YES];
}
Dies funktioniert einwandfrei, wenn die Methode zum ersten Mal aufgerufen wird, wenn der Benutzer das erste Spiel startet. Wenn das Spiel vorbei ist, rufe ich an[[CCDirector sharedDirector] end]
.
Der Großteil des Director-Setups wird in der AppDelegate durchgeführt (es wird unverändert aus der Cocos2d-Standardvorlage übernommen). Ich habe nur dieCCGLView
als Vorbehaltsware in meineMenuViewController
, denn sonst stürzt die App bei[[CCDirector sharedDirector] end]
heißt und dieCCGLView
wird nicht beibehalten. Ich denke, das könnte ein Cocos2D-Bug sein. Im[[CCDirector sharedDirector] end]
das Framework ruft[self setView:nil]
Es wird jedoch weiterhin versucht, später auf die Ansicht zuzugreifen (wahrscheinlich in einem anderen Thread).
Das Problem ist jetzt, dass beim zweiten Aufruf meiner obigen Methode (wenn der Benutzer ein anderes Spiel über das Menü starten möchte),startGameButtonPressed
wird der Regisseur gedrückt, aber der Bildschirm bleibt schwarz. Das Spiel läuft und reagiert, ich sehe einfach nichts. Kann mir bitte jemand dabei helfen?