Cocos2D, блоки и перемещение приложения в фоновый режим
У меня есть проект Cocos2D, который выполняет большую загрузку данных через ASIHTTPRequest. К запросу часто присоединен блок завершения, который может заставить Cocos2D сделать что-то вроде загрузки текстуры для отображения игрового элемента.
Моя проблема в том, что кажется, что блок завершения может быть вызван, когда приложение перемещается в фоновый режим. Это вызывает вызов OpenGL, что приводит к завершению работы приложения с ошибкой: gpus_ReturnNotPermittedKillClient
Директору Cocos2D говорят приостановить и остановить анимацию перед тем, как перейти к фону. Таким образом, кажется, что эти функции не влияют на блок, который еще не запущен (я бы этого не ожидал), и при этом это не предотвращает вызовы других функций Cocos2D, таких как [CCRenderTexture renderTextureWitWidth:andHeight:] для загрузки текстура.
Учитывая эту ситуацию, есть ли рекомендуемый способ безопасной приостановки игры, как описано?
1 ответ
Что вам нужно сделать, это предотвратить любые вызовы, которые используют контекст OpenGL, когда приложение находится в фоновом режиме, потому что в это время просто нет контекста OpenGL.
Что вы можете сделать, это сохранить текущее фоновое состояние (да или нет), и если игра находится в фоновом режиме во время выполнения асинхронного блока, блок должен вместо этого поставить себя в очередь в класс "Post-Background-Scheduler", который затем будет запущен блок снова и вычеркните его, когда игра вернется на передний план.
Или, если это касается только текстур, вы можете просто добавить каждую текстуру в массив и поставить их в очередь для кэширования. Затем, когда игра переходит в фоновый режим, очередь просто перестает снимать с очереди и возобновляет снятие очереди, когда игра находится на переднем плане.