cocos2d 2.0-rc2: finalize o diretor e reinicie
Eu tenho um jogo cocos2d que usa menus UIKit, então eu só uso o framework para um viewcontroller, que é o jogo em si. Além disso, tem apenas uma cena. Desde cocos2d 2.0 o próprio diretor é umUIViewController
subclasse, então eu apenas empurrei na minhaMenuViewController
quando o usuário toca no botão Iniciar:
-(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];
}
Isso funciona bem pela primeira vez que o método é chamado, quando o usuário inicia o primeiro jogo. Quando o jogo acabou, eu chamo[[CCDirector sharedDirector] end]
.
A maior parte da configuração do diretor é feita no appDelegate (ele é mantido inalterado no modelo Cocos2d padrão). Eu só coloquei oCCGLView
como uma propriedade retida no meuMenuViewController
, porque senão o aplicativo trava quando[[CCDirector sharedDirector] end]
é chamado e oCCGLView
não é retido. Eu acho que isso pode ser um bug cocos2d. Em[[CCDirector sharedDirector] end]
as chamadas do framework[self setView:nil]
, mas ainda tenta acessar a exibição mais tarde (provavelmente em outro thread).
O problema agora é que na segunda chamada do meu método acima (quando o usuário quer iniciar outro jogo a partir do menu),startGameButtonPressed
, o diretor é empurrado, mas a tela fica preta. O jogo está correndo e respondendo, eu não vejo nada. Alguém por favor pode me ajudar com isso?