Cocos2d在iPad上失败但在模拟器中工作

时间:2012-02-02 21:14:56

标签: ios5 cocos2d-iphone

我有一个非常简单的游戏,使用Xcode v4.2.1,Cocos2d v5.0.1。我在Xcode中尝试了两个编译器(LLVM GCC 4.2和Apple LLVM编译器3.0。是否有偏好?)在游戏屏幕上是一个UIKit按钮,向用户显示Interface Builder(笔尖)设置/选项屏幕以进行自定义游戏有点。这完全基于我在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 * scene ...是另一个尝试从场景中获取图层对象的失败尝试,以便我可以调用userSettings方法,然后游戏层可以将其同化到游戏中。

3 个答案:

答案 0 :(得分:1)

好的,所以我找到了一些可以缓解我的问题。

如果有人对此有所了解,请告诉我。我将继续使用此修复,除非我听到一个比我更了解的人的理由(这并不困难)。

在下面的讨论结束时,“psionic”的评论中找到了解决方案: http://www.cocos2d-iphone.org/forum/topic/7068

基本上,我在EAGLView类(EAGLView.m)中创建了一个静态bool,它围绕着layoutSubViews成员函数中对_resizeFromLayer的调用。对_resizeFromLayer的调用仅在第一次调用时调用,然后再调用。

请阅读上述讨论,让我知道您对此解决方案的喜欢/不喜欢,除了显而易见的......这是一个黑客攻击。

黑客,有效。我想。

答案 1 :(得分:1)

我有类似的问题。我已经将cocos2d与UIKit集成在一起。我添加了adMob。当用户点击展示Google BrowserView的广告时,会出现此问题。如果您使用完成按钮关闭视图,该应用程序工作正常。但是,如果用户在浏览器视图中按下主页按钮,并恢复应用程序,我也会遇到相同的异常。

OpenGL error 0x0506 in -[EAGLView swapBuffers]

显示UIKit按钮和广告,但它不会渲染cocos2d图层。

我从https://github.com/cocos2d/cocos2d-iphone/pull/198获得了解决方案,但我没有更改cocos2d源代码。相反,我在AppDelegate.m中添加了一个名为isAnimating的布尔值,并将该属性公开给了图层。

要解决此问题,我在进入谷歌浏览器视图之前在CCDirector上停止动画。并在恢复到应用程序后启动动画。 isAnimating ivar用于检查启动动画是否未被调用两次。

希望它有所帮助,

答案 2 :(得分:0)

在通过CCGLView实现Cocos2D时,我的应用程序中出现了类似的错误。

对我有用的解决方案是打电话

[[CCDirector sharedDirector] popScene]

展示Interface Builder Viewcontroller。