Как вы «выходите из сцены»?Это был бы более интересный код для просмотра.
Вот что я нашел странным в коде, который вы разместили:
- (void)viewDidLoad {
…
if (![[CCDirector sharedDirector] runningScene]) {
...
}
else {
// Where does this scene variable come from?
[[CCDirector sharedDirector] replaceScene:scene];
}
}
Обычно, когда вы запускаете replaceScene, вы предоставляете новую сцену.Возможно, вы попытаетесь заменить сцену той же сценой, которая также является текущей запущенной сценой.Это, безусловно, приведет к краху cocos2d.Если вы хотите, чтобы та же сцена снова появлялась, не вызывайте replaceScene или не создавайте сцену заново.
Вы также захотите проверить, что текущая сцена не освобождается.Установите точку останова в методе dealloc сцены.Если это освобождает вас, вы, вероятно, впали в заблуждение, что вам нужно стереть сцену cocos2d из памяти.Вы не должны этого делать, я думаю, что cocos2d всегда ожидает, что после запуска runWithScene всегда будет хотя бы одна сцена бега.
Для чего бы вы ни захотели, вы захотите использовать startAnimation и stopAnimation вместо паузы и возобновления.Это полностью остановит Cocos2D без освобождения сцены, поэтому работает так же, как пауза / возобновление.Я предполагаю, что внутренне он полностью отключает игровой цикл, тогда как пауза / возобновление поддерживает очень медленную работу, то есть 4 кадра в секунду, если я правильно помню.
У меня были случаи, когда пауза / возобновление вызывало бы«Ошибка OpenGL 0x0506 in - [EAGLView swapBuffers]» и startAnimation / stopAnimation исправят это.