cocococos 2 d-x androidプラットフォームはバックグラウンドテクスチャの故障の解決方法に切り込みます.

3202 ワード

回転:http://blog.csdn.net/langresser/article/details/8659538
 
androidシステムでは、バックグラウンドに切り込むと、テクスチャがすべて無効になり、バックグラウンドからフロントに切り込み、cocococococococococos 2 d-xはテクスチャを再読み込みします.このように二つの問題があります.
1、テクスチャが多いとテクスチャが長くかかり、フリーズするようになります.融通をきかせる解決方法はエンジンコードを修正して、プログレスバーのヒントを追加します.
2、文字の端などはRenderTextureを使うところに異常なテクスチャが発生し、文字が費やされます.原因はまだ分かりません.
ここで解決案を提供します.テクスチャが故障した問題を解決します.初歩的なテストでは大きな問題は発見されませんでしたが、具体的には実際の運行状況を見なければなりません.結局、androidマシンが多すぎます.
1、Cococos 2 dXGLOSurfaceView.javaコード修正
[cpp]view play copy print?
@Override
  • public void onPause(){
  • }
    this.queueEvent(new Runnable){
  • @Override
  • public void run(){}
  • Cocos 2 dxGLOSurfaceView.this.mCocos 2 dxRenderer.handleOnPause();
  • }
  • );
  • /super.onPause();
  • }
    @Override
    	public void onPause() {
    		this.queueEvent(new Runnable() {
    			@Override
    			public void run() {
    				Cocos2dxGLSurfaceView.this.mCocos2dxRenderer.handleOnPause();
    			}
    		});
    
    //		super.onPause();
    	}
    2、main.cpp中修正
    [cpp]view play copy print?
    void Java_org_cocococos 2 dx_lib_コスプレ2 dxRenderer_native Init(JNIEnv*env、jobject thiz、ジンt w、ジンt h)
  • {
  • }
    InitCrash Report();
  • if(!CCDirector::sharedDirector()->getOpenGLOview()
  • {
  • }
    CCEGLNew*view=CCEGLOView:sharedOpenGLNView();
  • view->set Frame Size(w,h);
  • AppDelegate*pAspDelegate=new AppDelegate();
  • CCAppleication:sharedAppleication()->run();
  • }
  • /else
  • //{}
  • //cctDrawInit();
  • //cctGInvalidateStteCache();
  • //CCShaderCache:shared ShaderCache()->reloadDefault Shaders();
  • /CCTextureCache:reloadAllTextures();
  • //CCNotificationCenter:sharedNotificationCenter()->postNotification(EVNET COMEuTOUEGROUND、NULL)、
  • /CCDirector::sharedDirector()>setGLODefaultValues();
  • //}
  • void Java_org_cocos2dx_lib_Cocos2dxRenderer_nativeInit(JNIEnv*  env, jobject thiz, jint w, jint h)
    {
        InitCrashReport();
    
        if (!CCDirector::sharedDirector()->getOpenGLView())
        {
            CCEGLView *view = CCEGLView::sharedOpenGLView();
            view->setFrameSize(w, h);
    
            AppDelegate *pAppDelegate = new AppDelegate();
    
            CCApplication::sharedApplication()->run();
        }
        // else
        // {
        //     ccDrawInit();
        //     ccGLInvalidateStateCache();
            
        //     CCShaderCache::sharedShaderCache()->reloadDefaultShaders();
        //     CCTextureCache::reloadAllTextures();
        //     CCNotificationCenter::sharedNotificationCenter()->postNotification(EVNET_COME_TO_FOREGROUND, NULL);
        //     CCDirector::sharedDirector()->setGLDefaultValues(); 
        // }
    }
    
     
    SurfaceViewのOnPauseはテクスチャを無効にします.ここでOnPauseを遮断すれば、バックグラウンドとフロントの切り替えはテクスチャを無効にしません.短い時間で運行は正常です.何時間かけても正常かどうかは分かりません.テクスチャを再読み込みする必要がなくなり、バックグラウンドからフロントに出現するカード画面も現れなくなります.
    注意してください.OnPauseを起動しないので、バックグラウンドに切った時、レンダリングサイクルと音が停止していません.ここでは修正が必要です.バックグラウンドに切った時に、サウンドの再生を停止し、レンダリング操作を停止します.そして、フレームごとにsleep(50)はバックグラウンドの運行時に電力を消費しすぎないようにします.