cocos2d-x android黑屏后返回游戲卡頓


轉自: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的使用了這個宏~

關閉之,測試,哭了,回去后黑屏~

繼續翻貼,發現

http://novacreo.com/%E7%A8%8B%E5%BA%8F%E7%BB%84/%E8%BF%94%E5%9B%9Eandroid%E6%B8%B8%E6%88%8F%E9%BB%91%E5%B1%8F%E8%A7%A3%E5%86%B3%E5%8A%9E%E6%B3%95/

//原帖內容如下:

返回Android游戲黑屏解決辦法

這幾天逛cocos2d-x.org論壇,發現cocos2d-x的作者放出來一個帖子,用來解決返回Android游戲加載資源時黑屏的問題。帖子過些日子估計就沉了,所以轉出來,以供后面查詢。

需要修改三個文件:

1) cocos2dx/platform/CCPlatformMacros.h

 

將Line84修改為 #define CC_ENABLE_CACHE_TEXTURE_DATA       0

macro

2)cocos2dx/platform/android/java/src/org/cocos2dx/lib/Cocos2dxGLSurfaceView.java

注釋掉Line167。

comment

3)android工程目錄下jin/hellocpp/main.cpp

注釋掉Line32~43。

main

基本原理就是在activity進入后台后,不清除texture緩存,這樣在activity回到前台后,不需要重新load資源。

我在自己的游戲上試了一把,修改之前切回游戲需要4秒左右時間,修改后不用1秒,可謂瞬間完成。

不過這個解決方案有些小問題,當有其他surfaceView的activity,比如集成了Admob廣告后,切回來時只能看到廣告,而不顯示游戲畫面。有個老外Pablo Tonello回復帖子說沒有集成Admob也遇到了這種情況。目前還不知道是啥問題,有待慢慢研究。

 

 

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

這個帖子倒是解決問題了,不過瞧那意思插入其他的SDK可能還有問題~

待解決吧

還有個帖子是說做個load界面來顯示,以遮住卡頓~~~~~~~~~~~~

帖子地址:http://blog.csdn.net/yanghuiliu/article/details/7362019

 

如果有更好的辦法,麻煩告訴我一下~THX


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM