2012-06-13 2 views
6

моя игра cocos2d-x падает при вводе фона. здесь некоторый код из AppDelegate:cocos2d-x игра падает при вводе фона

// This function will be called when the app is inactive. When comes a phone call,it's be invoked too 
void AppDelegate::applicationDidEnterBackground() 
{ 

    CCDirector::sharedDirector()->pause(); 

    CCUserDefault::sharedUserDefault()->flush(); 

    CocosDenshion::SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic(); 

} 

// this function will be called when the app is active again 
void AppDelegate::applicationWillEnterForeground() 
{ 


    CCDirector::sharedDirector()->resume(); 

    CocosDenshion::SimpleAudioEngine::sharedEngine()->resumeBackgroundMusic(); 
} 

и сообщение об ошибке:

libGPUSupportMercury.dylib`gpus_ReturnNotPermittedKillClient: 
0x3797e094: trap 
0x3797e096: nop  

отмечают, что он всегда падает на iPhone, но 99% падает на Android (хорошо, когда игра не загружать большой изображения и т. д.)

EDIT: Я пробовал CCDirector :: sharedDirector() -> stopAnimation(), и он отлично работает для iOS. Но все же происходит сбой для Android (не сразу.) При возврате в приложение экран становится черным (но я думаю, что он все еще работает, потому что фоновая музыка все еще воспроизводится, а затем примерно через 5 секунд он сбой)

EDIT 2: сообщение об ошибке в Eclipse:.

libEGL call to OpenGL ES API with no current context (logged once per thread)  (red warning text) 

libc  Fatal signal 11 (SIGSEGV) at 0x5f012000 (code=2)     (black text) 

ответ

5

Приложение делегат метод applicationDidEnterBackground: называется после ваше приложение переходит в фоновом режиме, но перед тем приложение приостановлено к сожалению, вы не можете выполнить любой на графическом графике в фоновом режиме, или сторожевой таймер остановит вас (как вы видите здесь).

Предполагая, что ваш вызов CCDirector::sharedDirector()->pause() несет ответственность за остановку цикла графики/анимации, вы должны перенести его на метод делегата applicationWillResignActive:. Этот метод называется до. Ваше приложение переходит на задний план.

Однако у вас есть структурированный код, убедитесь, что цикл анимации полностью очищен и остановлен до того, как вы вернетесь с вызова делегата applicationWillResignActive:.

Примечания: Этот ответ в отношении того, почему он всегда падает на прошивке

+0

я назвал ccdirector :: sharedDirector() -> stopAnimation() и он работает сейчас – OMGPOP

+0

жаль, аварии для андроида Теперь. ios в порядке – OMGPOP

+0

@OMGPOP Я предлагаю вам задать два отдельных вопроса, потому что причины сбоя будут разными. Я предполагаю, что есть еще один обратный вызов в Android, где вам нужно прекратить обновление графического процессора, но вы не получите обратный вызов. –

Смежные вопросы