2012-06-13 55 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,但是Android上99%的崩潰(好吧,當比賽還沒有裝載大圖像等)

編輯: 我試過CCDirector :: sharedDirector() - > stopAnimation(),它適用於iOS。但仍然崩潰的Android(不是馬上回到應用程序,屏幕變黑(但我認爲它仍然運行,因爲背景音樂仍在播放,然後約5秒後它崩潰)

編輯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:被稱爲您的應用程序轉移到後臺,但之前您的應用程序被暫停不幸的是,你可以不執行任何 GPU指令在後臺運行,或者看門狗會終止你(如你在這裏看到的)。

假設您的CCDirector::sharedDirector()->pause()調用負責停止圖形/動畫循環,則應將其移至applicationWillResignActive:委託方法。該方法在之前稱爲,您的應用程序轉換到後臺。

但是,您擁有自己的代碼結構,請確保您的動畫循環在從applicationWillResignActive:委託調用返回之前完全刷新並停止。

注:這個答案是參考它爲什麼老是死機iOS上

+0

我叫ccdirector :: sharedDirector() - > stopAnimation()和現在的工作 – OMGPOP

+0

對不起,崩潰了Android現在。 IOS是好的 – OMGPOP

+0

@OMGPOP我建議你提出兩個不同的問題,因爲崩潰的原因肯定會有所不同。我的猜測會是在Android中有另一個回調,你必須停止更新GPU,但你沒有得到回調。 –