2

我有一個Cocos2D項目,通過ASIHTTPRequest進行大量的數據加載。 該請求通常會附帶一個完成塊,這可能會觸發Cocos2D執行類似加載紋理以顯示遊戲元素的操作。Cocos2D,塊和將應用程序移動到背景

我的問題是,看起來應用程序被移動到後臺時可以調用完成塊。這會觸發OpenGL調用,從而導致應用程序終止,並顯示以下錯誤: gpus_ReturnNotPermittedKillClient

Cocos2D控制器被告知在移動到後臺之前暫停和停止動畫。因此,這些函數似乎對尚未運行的塊(我不期望它)沒有影響,也似乎不阻止調用其他Cocos2D函數,如[CCRenderTexture renderTextureWitWidth:andHeight:]加載一個紋理。

鑑於這種情況,是否有推薦的方式來安全地暫停遊戲?

回答

1

您需要做的是在應用程序處於後臺時阻止任何使用OpenGL上下文的調用,因爲在那段時間內沒有OpenGL上下文。

你可以做的是存儲當前的背景狀態(是或否),並且如果遊戲在異步塊運行時處於後臺,那麼該塊應該將自己排隊到「Post-Background-Scheduler」類然後當遊戲回到前臺時,它將再次運行該塊並將其出隊。或者,如果這只是關於紋理,您可以簡單地將每個紋理添加到數組並將它們排隊以進行緩存。然後,當遊戲進入後臺時,隊列將停止出隊,並在遊戲處於前臺時恢復出隊。

相關問題