Cocos2d не работает на iPad, но работает в симуляторе - PullRequest
1 голос
/ 03 февраля 2012

У меня очень простая игра с использованием Xcode v4.2.1, Cocos2d v5.0.1. Я пробовал оба компилятора в Xcode (LLVM GCC 4.2 и Apple LLVM 3.0. Есть ли предпочтение ??). На экране игры есть кнопка UIKit, которая предоставляет пользователю экран настроек / опций Interface Builder (nib) для настройки. игры немного. Все это основано на том, что я узнал из урока Рэя Вендерлиха (http://www.raywenderlich.com/4817/how-to-integrate-cocos2d-and-uikit).

После того, как пользователь внес свои изменения, они возвращаются в игру, и изменения вступают в силу.

В симуляторе все работает так, как я хочу, однако при тестировании игры на iPad в окне отладки появляются следующие ошибки:

2012-01-27 18:25:27.305 BonkBonk[1082:707] failed to call context
2012-01-27 18:25:27.310 BonkBonk[1082:707] cocos2d: surface size: 1024x768
2012-01-27 18:25:27.316 BonkBonk[1082:707] Failed to make complete framebuffer object 8cdd
OpenGL error 0x0506 in -[EAGLView swapBuffers]
OpenGL error 0x0506 in -[EAGLView swapBuffers]
OpenGL error 0x0506 in -[EAGLView swapBuffers]

Ошибки OpeenGl продолжаются бесконечно.

Я использую функцию viewWillAppear, чтобы зафиксировать возврат с экрана настроек / опций, чтобы я мог передать новые настройки игровому слою. Если я закомментирую этот код, проблема исчезнет, ​​однако я не смог получить новые пользовательские настройки для игрового слоя.

Вот код:

- (void) viewWillAppear:(BOOL)animated
{
    [self.navigationController setNavigationBarHidden:YES animated:animated];
    //CCScene *scene = [[CCDirector sharedDirector] runningScene];
    CCScene *scene = [BonkBonkLayer scene];
    id layer = [scene getChildByTag:1];
    [layer userSettings];
    [super viewWillAppear:animated];
}

Закомментированная строка // CCSene * scene ... была еще одной неудачной попыткой получить объект слоя со сцены, чтобы я мог вызвать метод userSettings, где игровой слой затем мог бы ассимилировать его в игру.

Ответы [ 3 ]

1 голос
/ 30 октября 2012

У меня была похожая проблема. Я интегрировал cocos2d с UIKit. Я добавил adMob. Проблема проявляется, когда пользователь нажимает на рекламу, которая представляет Google BrowserView. Если вы отклоните просмотр с помощью кнопки «Готово», приложение будет работать нормально. Однако, если пользователь нажал кнопку «Домой» в режиме просмотра браузера и возобновил работу приложения, я получил то же исключение.

OpenGL error 0x0506 in -[EAGLView swapBuffers]

Отображаются кнопки UIKit и реклама, но она не отображает слой cocos2d.

Я получил решение от https://github.com/cocos2d/cocos2d-iphone/pull/198,, но я не изменил источник cocos2d. Вместо этого я добавил логический ivar с именем isAnimating в AppDelegate.m и выставил свойство слоям.

Чтобы решить эту проблему, я останавливаю анимацию на CCDirector перед входом в Google Browser View. и запустить анимацию, как только возобновить в приложение. isAnimating ivar используется для проверки, что анимация запуска не вызывается дважды.

Надеюсь, это поможет,

1 голос
/ 04 февраля 2012

ОК, так что я нашел что-то, что облегчает мою проблему.

Если кто-нибудь что-нибудь знает об этом, пожалуйста, дайте мне знать. Я буду продолжать использовать это исправление, если не услышу причину от кого-то более знающего, чем я (и это не так сложно).

Решение найдено в комментарии "psionic" в конце следующего обсуждения: http://www.cocos2d -iphone.org / форум / тема / 7068 .

По сути, я создал статический тип bool в классе EAGLView (EAGLView.m), который окружает вызов _resizeFromLayer в функции-член layoutSubViews. Вызов _resizeFromLayer вызывается только в первый раз, а затем никогда больше.

Пожалуйста, прочитайте приведенное выше обсуждение и дайте мне знать, что вам нравится / не нравится в этом решении, кроме очевидного ... это взлом.

Взломать, это работает. Я думаю.

0 голосов
/ 27 января 2013

У меня были похожие ошибки в моем приложении при реализации Cocos2D через CCGLView.

Решение, которое у меня работало, состояло в том, чтобы вызвать

[[CCDirector sharedDirector] popScene]

при представлении Интерфейсного Разработчика Viewcontroller.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...