2012-06-13 16 views
6

mein cocos2d-x-Spiel stürzt ab, wenn Sie den Hintergrund betreten. hier ist ein Code von AppDelegate:cocos2d-x-Spiel stürzt ab, wenn Hintergrund eingegeben

// 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(); 
} 

und die Fehlermeldung:

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

beachten Sie, dass es immer für iPhone abstürzt, aber 99% stürzt auf Android (okay, wenn das Spiel nicht geladen werden groß Bilder usw.)

EDIT: Ich habe versucht, CCDirector :: sharedDirector() -> stopAnimation() und es funktioniert gut für iOS. Aber stürzt immer noch für Android (nicht sofort. Bei der Rückkehr zur App, der Bildschirm wird schwarz (aber ich denke, es läuft noch, weil Hintergrundmusik noch spielt. Dann etwa 5 Sekunden später stürzt es ab)

EDIT 2: die Fehlermeldung in 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) 

Antwort

5

die App Delegatmethode applicationDidEnterBackground:nach Ihre Anwendung geht in den Hintergrund genannt wird, aber vor Ihre Anwendung suspendiert Leider kann man nicht führen Sie einen GPU Befehle im Hintergrund, oder der Watchdog wird Sie beenden (wie Sie hier sehen).

Angenommen, Ihr CCDirector::sharedDirector()->pause() Aufruf ist für das Stoppen Ihrer Grafik-/Animationsschleife verantwortlich. Sie sollten dies auf die Delegatenmethode applicationWillResignActive: verschieben. Diese Methode heißt vor Ihre Anwendung wechselt in den Hintergrund.

Wie auch immer Sie Ihren Code strukturiert haben, stellen Sie sicher, dass Ihre Animationsschleife vollständig geleert und gestoppt ist, bevor Sie vom Delegiertenanrufzurückkehren.

Hinweis: Diese Antwort ist in Bezug auf, warum es stürzt immer auf iOS

+0

ich den ccdirector genannt :: sharedDirector() -> stopAnimation() und es funktioniert jetzt – OMGPOP

+0

sorry, für android stürzt jetzt. ios ist ok – OMGPOP

+0

@OMGPOP Ich schlage vor, Sie machen zwei getrennte Fragen, weil die Gründe für den Absturz sicher anders sein werden. Meine Vermutung wäre, dass es einen weiteren Rückruf in Android gibt, bei dem Sie aufhören müssen, die GPU zu aktualisieren, aber Sie erhalten den Rückruf nicht. –

Verwandte Themen