2012-02-02 3 views
1

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

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

Это все работает, как я хочу в тренажере, однако, когда я протестировать игру на 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 * сцена ... была еще одна неудачная попытка при получении объект слоя со сцены, чтобы я мог позвонить в UserSettings метод, где в игровой слой затем может ассимилировать его в игру.

ответ

1

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

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

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

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

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

A hack, that works. Я думаю.

+0

Это исправило мою проблему - спасибо! – AbePralle

+0

После этого я наткнулся на это, вероятно, более надежное решение - не пробовал: http://stackoverflow.com/questions/8990770/failed-to-make-complete-framebuffer-object-8cd6-ios-programmatically -created-о – AbePralle

1

У меня была аналогичная проблема. Я интегрировал 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. и начать анимацию после возобновления приложения. isAnimating ivar используется для проверки того, что анимация запуска не вызывается дважды.

Надеется, что это помогает,

0

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

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

[[CCDirector sharedDirector] popScene] 

при представлении Interface Builder ViewController.

Смежные вопросы