轉自:http://blog.csdn.net/wolfking_2009/article/details/8824931
2013年5月17日更新:對於之前說的資源釋放問題,cocos2d-x 2.1.3已經解決,就是說中斷之后不釋放資源,估計方法跟之前提到的差不多,我沒有仔細研究過....
在調試的過程中發現,如果中斷處理的時候,讓游戲顯示暫停界面,方法不當有可能會出問題,本人就遭遇了,返回時直接退出游戲,或者不顯示暫停界面的問題。后來發現如果創建的暫停界面層,在AppDelegate::applicationDidEnterBackground方法里創建會沒有問題~如果在AppDelegate::applicationWillEnterForeground()方法里創建就有可能出現如上問題~
再來說下聲音中斷~其實聲音中斷有個比較魂淡的地方,就是聲音中斷時,可以直接stop,返回時再play,但是android上發現惡心的問題,就是游戲的時候直接點電源關掉屏幕,再返回的時候,在鎖屏界面,游戲就又繼續了,意思是鎖屏界面就已經調用AppDelegate::applicationWillEnterForeground()~機制問題沒辦法,還沒有想到解決辦法~
---------------------------------------------------------------------------------------------------------------------------------------------------------------------
今天在android手機上測試游戲聲音的中斷,發現比較惡心的事情是,中斷完返回游戲后,發現游戲長時間卡頓~
網上翻帖子~發現是游戲資源被釋放掉了,回來的時候要重新加載~群里有大俠說是CCTextureCache的原因~
用ios測試了下,發現沒有問題,然后開始找CCTextureCache的問題了~發現了一個宏
/** Reload all textures
It's only useful when the value of CC_ENABLE_CACHE_TEXTURE_DATA is 1
*/
static void reloadAllTextures();
顯然跟CC_ENABLE_CACHE_TEXTURE_DATA 這個宏有關。
找到源頭,發現
/** @def CC_ENABLE_CACHE_TEXTURE_DATA
Enable it if you want to cache the texture data.
Basically,it's only enabled in android
It's new in cocos2d-x since v0.99.5
*/
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
#define CC_ENABLE_CACHE_TEXTURE_DATA 1
#else
#define CC_ENABLE_CACHE_TEXTURE_DATA 0
#endif
好嘛~只有android的使用了這個宏~
關閉之,測試,哭了,回去后黑屏~
繼續翻貼,發現
//原帖內容如下:
返回Android游戲黑屏解決辦法
這幾天逛cocos2d-x.org論壇,發現cocos2d-x的作者放出來一個帖子,用來解決返回Android游戲加載資源時黑屏的問題。帖子過些日子估計就沉了,所以轉出來,以供后面查詢。
需要修改三個文件:
1) cocos2dx/platform/CCPlatformMacros.h
將Line84修改為 #define CC_ENABLE_CACHE_TEXTURE_DATA 0
2)cocos2dx/platform/android/java/src/org/cocos2dx/lib/Cocos2dxGLSurfaceView.java
注釋掉Line167。
3)android工程目錄下jin/hellocpp/main.cpp
注釋掉Line32~43。
基本原理就是在activity進入后台后,不清除texture緩存,這樣在activity回到前台后,不需要重新load資源。
我在自己的游戲上試了一把,修改之前切回游戲需要4秒左右時間,修改后不用1秒,可謂瞬間完成。
不過這個解決方案有些小問題,當有其他surfaceView的activity,比如集成了Admob廣告后,切回來時只能看到廣告,而不顯示游戲畫面。有個老外Pablo Tonello回復帖子說沒有集成Admob也遇到了這種情況。目前還不知道是啥問題,有待慢慢研究。
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
這個帖子倒是解決問題了,不過瞧那意思插入其他的SDK可能還有問題~
待解決吧
還有個帖子是說做個load界面來顯示,以遮住卡頓~~~~~~~~~~~~
帖子地址:http://blog.csdn.net/yanghuiliu/article/details/7362019
如果有更好的辦法,麻煩告訴我一下~THX