IOS 5 - Cocos2d и UIKit выдвигают и извлекают UIView, вызывая «не удалось вызвать контекст» - PullRequest
0 голосов
/ 28 марта 2012

У меня полностью рабочая игра cocos2d. Я подумал, что было бы неплохо добавить простой маленький экран приветствия, прежде чем играть в игру.

* ПРИМЕЧАНИЕ это происходит только при работе на устройстве iPad, но никогда в симуляторе ***

До добавления экрана приветствия базовая навигация / поток кода был

MainWindow.xib (содержит контроллер навигации с RootViewController) RootViewController добавляет EAGLView в качестве полноэкранного дочернего элемента.

RootViewController.xib содержит кнопку UIKit для отображения страницы «предпочтений», позволяющей пользователям изменять параметры игры. Когда вы закончите, откроется страница настроек, посмотрите стандартную навигационную кнопку «назад» на экране игры.

Все это прекрасно работает.

Как у меня сейчас, RootViewController загружает создает WelcomeViewController и затем помещает его в стек навигации. Эта страница появляется, когда пользователь нажимает кнопку воспроизведения.

Еще раз, все это прекрасно работает ... пока ...

Элемент управления возвращается в RootViewController и сцену cocos2d. Во время обработки кода инициализации для viewWillAppear код cocos2d в конечном итоге приходит к функции «resizeFromLayer». Параметр layer не изменился и, согласно отладчику, имеет правильный тип, как и переменная context_. Однако после звонка на

context_ renderbufferStorage: GL_RENDERBUFFER_OES fromDrawable: layer]

выдается ошибка CCLog "не удалось вызвать контекст".

Позже ошибки: "Не удалось создать полный объект кадрового буфера" сопровождаемый бесконечным потоком: Ошибка OpenGL 0x0506 в - [EAGLView swapBuffers]

Если я закомментирую код для отображения экрана приветствия, ничего этого не произойдет.

Что может происходить, и где я должен искать решение этой проблемы, когда я возвращаюсь в сцену cocos2d после того, как навигационный контроллер UIKit был активирован?

Заранее спасибо!

Ответы [ 3 ]

2 голосов
/ 04 декабря 2014

Альтернативный способ решения этой проблемы:

Перед вызовом настоящего контроллера [[CCDirector sharedDirector] pause]

После отклонения вызова [[CCDirector sharedDirector] resume]

2 голосов
/ 23 сентября 2012

Я получил ту же проблему и решил ее следующим образом:

Перед нажатием на кнопку просмотра звоните [[CCDirector sharedDirector] stopAnimation].
После того, как просмотр был сован, позвоните [[CCDirector sharedDirector] startAnimation].

0 голосов
/ 03 января 2019
CALayer *superLayer = layer.superlayer;
[layer removeFromSuperlayer];
if( ! [context_ renderbufferStorage:GL_RENDERBUFFER fromDrawable:layer] )
{
    NSLog(@"failed to call context");
}
if (superLayer) {
    [superLayer addSublayer:layer];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...