2

我有一个 Cocos2D 项目,它通过 ASIHTTPRequest 加载大量数据。该请求通常附带一个完成块,这可能会触发 Cocos2D 执行诸如加载纹理以显示游戏元素之类的操作。

我的问题是,当应用程序移到后台时,似乎可以调用完成块。这会触发 OpenGL 调用,导致应用程序终止并出现以下错误:gpus_ReturnNotPermittedKillClient

Cocos2D 导演被告知在移动到背景之前暂停并停止动画。因此,这些函数似乎对尚未运行的块没有影响(我不希望它会这样),这似乎也不会阻止调用其他 Cocos2D 函数,例如 [CCRenderTexture renderTextureWitWidth:andHeight:] 加载一种纹理。

鉴于这种情况,是否有推荐的方法来安全地暂停游戏?

4

1 回答 1

1

您需要做的是防止在应用程序处于后台时使用 OpenGL 上下文的任何调用,因为在此期间根本没有 OpenGL 上下文。

您可以做的是存储当前的后台状态(是或否),如果游戏在异步块运行时处于后台,则该块应该将自己排队到“Post-Background-Scheduler”类然后运行再次阻止并在游戏回到前台时将其出列。

或者,如果这仅涉及纹理,您可以简单地将每个纹理添加到数组中并将它们排队以进行缓存。然后,当游戏进入后台时,队列只是停止出队并在游戏处于前台时恢复出队。

于 2013-06-03T19:23:18.890 回答