我有一个非常简单的游戏,使用Xcode v4.2.1,Cocos2d v5.0.1。我在Xcode中尝试过这两种编译器(LLVM GCC 4.2和Apple LLVM编译器3.0)。有偏好吗?)游戏屏幕上有一个UIKit按钮,它为用户提供了一个界面生成器(nib)设置/选项屏幕,以自定义游戏。这一切都是基于我在Ray Wenderlich的教程中学到的(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*场景。。。是另一次从场景中获取层对象的失败尝试,这样我就可以调用userSettings方法,然后游戏层可以将其吸收到游戏中。
好吧,所以我找到了一些可以缓解问题的方法。
如果有人知道这件事,请告诉我。我会继续使用这个修复程序,除非我从比我自己更了解的人那里听到原因(这并不难)。
在以下讨论结束时,"灵能"在评论中找到了解决方案:http://www.cocos2d-iphone.org/forum/topic/7068.
基本上,我在EAGLView类(EAGLView.m)中创建了一个静态布尔,它围绕着layoutSubViews成员函数中对_resizeFromLayer的调用。对_resizeFromLayer的调用只在第一次到第二次调用,然后再也不会调用。
请阅读上面的讨论,让我知道你喜欢/不喜欢这个解决方案,除了明显的。。。这是一次黑客攻击。
一个黑客,这是有效的。我想。
我也遇到了类似的问题。我已经将cocos2d与UIKit集成在一起。我添加了adMob。当用户点击显示谷歌浏览器视图的广告时,问题就会出现。如果使用"完成"按钮关闭"视图",则应用程序工作正常。然而,如果用户在浏览器视图中按下主页按钮,然后恢复应用程序,我会得到同样的异常。
OpenGL error 0x0506 in -[EAGLView swapBuffers]
显示了UIKit按钮和Ads,但它没有渲染cocos2d层。
我从https://github.com/cocos2d/cocos2d-iphone/pull/198,但我没有更改cocos2d的来源。相反,我在AppDelegate.m中添加了一个名为isAnimating的布尔ivar,并将该属性公开给Layers。
为了解决这个问题,我在进入谷歌浏览器视图之前停止CCDirector上的动画。并在应用程序恢复后开始动画。isAnimating ivar用于检查启动动画是否未调用两次。
希望有帮助,
在通过CCGLView实现Cocos2D时,我的应用程序中也出现了类似的错误。
对我有效的解决方案是打电话给
[[CCDirector sharedDirector] popScene]
当呈现界面生成器视图控制器时。