6

バックグラウンドに入ると、cocos2d-xゲームがクラッシュします。AppDelegateのコードは次のとおりです。

// 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)
4

1 に答える 1

5

アプリ デリゲート メソッドapplicationDidEnterBackground:は、アプリケーションがバックグラウンドに移行した、アプリケーションが中断される前に呼び出されます。残念ながら、バックグラウンドで GPU 命令を実行することはできません。そうしない、ウォッチドッグによって終了されます (ここに表示されているように)。

CCDirector::sharedDirector()->pause()呼び出しがグラフィックス/アニメーション ループを停止する責任があると仮定すると、それをapplicationWillResignActive:デリゲート メソッドに移動する必要があります。このメソッドは、アプリケーションがバックグラウンドに移行する前に呼び出されます。

applicationWillResignActive:ただし、コードが構造化されている場合は、デリゲート呼び出しから戻る前に、アニメーション ループが完全にフラッシュされて停止していることを確認してください。

注: この回答は、iOS で常にクラッシュする理由に関するものです。

于 2012-06-13T04:22:20.877 に答える