最近項目中遇到圖檔出現黑塊的情況,主要表現為:支付回到遊戲後,部分紋理在部分機型上出現黑塊。
google了一下,大多數給的答案是:在老版的cocos2dx引擎中,目前遊戲的Activity跳轉到支付,執行了onpause後,會解除安裝目前紋理,當回到遊戲的Activity,執行onResume後,會恢複紋理。
然後仔細跟了一下TextureCache以及TextureRender的源碼,發現其實紋了解除安裝操作已經被注釋了(項目引擎版本是cocos3.5),也就是說,這裡的紋理黑塊不是因為紋了解除安裝引起的,那麼問題在哪兒?
通過觀察發現,支付回到遊戲後,遊戲的第一幀不會出現紋理黑塊,但是第二幀就出現了,這個現象是不是很奇怪??
好了,不說後來的分析流程了,直接說答案吧,其實就是因為支付回調然後jni調用遊戲代碼是在主線程中進行的!
是以出現這種紋理黑塊,目前來說有幾個方向去查:
1.onpause後紋了解除安裝引起的
2.在主線程中調用jni代碼與遊戲互動可能引起
3.紋理的記憶體洩露