標籤:
最近遇到一個cocos2dx 骨骼動畫註冊事件播放音效,在骨骼動畫播放的時候,按HOME鍵退到案頭,再次開啟遊戲的時候,會黑屏。
解決辦法如下,可能不是太完美,至少解決了大部分問題。
1.在org.cocos2dx.lib下的 Cocos2dxRenderer.java 中添加native方法
public static native void setIsPause(boolean isPause);
2.在Cocos2dxRenderer.java對應的Java_org_cocos2dx_lib_Cocos2dxRenderer.cpp中添加對應的方法
JNIEXPORT void JNICALL Java_org_cocos2dx_lib_Cocos2dxRenderer_setIsPause(JNIEnv* env, jobject thiz, jboolean ispause) { CCDirector::sharedDirector()->setAndroidPause(ispause); }
3.在CCDirector.cpp中添加setAndroidPause用來標記是否已經暫停
//設定暫停狀態void CCDirector::setAndroidPause(bool isPause){ m_bAndroidPaused = isPause;}//擷取暫停狀態bool CCDirector::getAndroidPause(){ return m_bAndroidPaused;}
4.在org.cocos2dx.lib下的Cocos2dxActivity.java中的onPause添加 1 步驟的方法
@Override protected void onPause() { Cocos2dxRenderer.setIsPause(true); super.onPause(); Cocos2dxHelper.onPause(); this.mGLSurfaceView.onPause(); }
5.在CCTextureCache.cpp的 VolatileTexture::reloadAllTextures() 方法中添加一行代碼,用來恢複暫停狀態
void VolatileTexture::reloadAllTextures(){ isReloading = true; CCLOG("reload all texture"); ... ...//此處省略中間內容 isReloading = false; //最後一行將暫停設定為false CCDirector::sharedDirector()->setAndroidPause(false);}
6.播放音樂時候判斷一下是否是暫停狀態還沒有恢複過來 SimpleAudioEngine.cpp中
unsigned int SimpleAudioEngine::playEffect(const char* pszFilePath, bool bLoop){ if(CCDirector::sharedDirector()->getAndroidPause()) return 0; std::string fullPath = getFullPathWithoutAssetsPrefix(pszFilePath); return playEffectJNI(fullPath.c_str(), bLoop);}
Android裝置 cocos2dx 骨骼動畫註冊事件播放音效,退到後台再返回黑屏問題