我有一个Cocos2D项目,通过ASIHTTPRequest进行大量数据加载。 该请求通常附有一个完成块,这可能会触发Cocos2D执行加载纹理以显示游戏元素的操作。
我的问题是,当应用程序移动到后台时,似乎可以调用完成块。这会触发OpenGL调用,导致应用程序因错误而终止: gpus_ReturnNotPermittedKillClient
Cocos2D导演被告知在移动到后台之前暂停和停止动画。所以看起来这些函数对尚未运行的块没有影响(我不希望这样),这似乎也不会阻止对其他Cocos2D函数的调用,比如[CCRenderTexture renderTextureWitWidth:andHeight:]加载纹理。
鉴于这种情况,是否有推荐的方法来安全地暂停游戏?
答案 0 :(得分:1)
您需要做的是在应用程序处于后台时阻止使用OpenGL上下文的任何调用,因为在此期间根本没有OpenGL上下文。
你可以做的是存储当前的背景状态(是或否),如果在异步块运行时游戏在后台,则该块应该将自己排队到“后背景调度程序”类然后将再次运行该块并在游戏返回前景时将其出列。
或者,如果这仅涉及纹理,您可以简单地将每个纹理添加到数组并将它们排队以进行缓存。然后当游戏进入后台时,队列只会停止出列,并在游戏进入前台时恢复出局。