Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> cocos2d-x android平台切入後台紋理失效的解決方法

cocos2d-x android平台切入後台紋理失效的解決方法

編輯:關於Android編程

android系統下,切入後台,則紋理全部失效,從後台切到前台,cocos2d-x會重新加載紋理。這樣有兩個問題: 1、如果紋理較多的話,加載紋理會卡很長時間,就像死機一樣。  變通解決方法是修改引擎代碼,增加一個進度條提示。 2、文字描邊等用到RenderTexture的地方會出現異常紋理,文字會花掉。  暫時不知道原因,無解。   這裡提供一個解決方案,解決掉紋理失效的問題,初步測試沒有發現大的問題,但是具體還要看實際運行情況,畢竟android機器太多了。 1、Cocos2dXGLSurfaceView.java代碼修改 [cpp]   @Override       public void onPause() {           this.queueEvent(new Runnable() {               @Override               public void run() {                   Cocos2dxGLSurfaceView.this.mCocos2dxRenderer.handleOnPause();               }           });      //      super.onPause();       }   2、main.cpp中修改 [cpp]   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)防止後台運行時太過耗電。
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved