我在这里有100%可重现的崩溃。
如果在观看游戏中心屏幕(排行榜,成就)时在iOS7中背景cocos2d 2.1 app崩溃。按下主页按钮时会立即崩溃。
CCGLView.m第275行崩溃:
if(![_context presentRenderbuffer:GL_RENDERBUFFER])
令人痒的是,我下载了官方cocos2diphone 2.1的新副本,另外一个,安装了它的模板并运行了主要应用程序后将其连接到与我已经有游戏中心排行榜等设置的有问题的应用程序相同的应用程序ID起来。它没有崩溃。所以我在lib里面的cocos2d文件夹上运行了一个diff,除了我在CCDrawingPrimitives.h / m中添加了一些C函数代码之外没有区别......应该不是问题。 所以问题不应该在cocos2d本身,但不知何故,使用它或我的项目设置会导致它。
更新
问题似乎出现在2.1和之前使用的cocos2d app模板中。它看起来像这样:
-(void) applicationDidEnterBackground:(UIApplication*)application
{
if( [navController_ visibleViewController] == director_ )
[director_ stopAnimation];
}
这里明显的错误是如果你有navController打开游戏中心控制器,那么当按下home按钮时,director_的visibleViewController将是GC控制器,因此不会调用stopAnimation。这会导致iOS7崩溃,但似乎没有iOS6 ...也没有模板cocos2d 2.1 app(这里仍然很困惑)。
目前的修复方法是注释掉if( [navController_ visibleViewController] == director_ )
,以便始终调用stopAnimation。不确定是否有任何副作用,但现在将继续这样做。
答案 0 :(得分:4)
所以我的解决方案是在显示游戏中心之前停止导演动画。
[[CCDirector sharedDirector] stopAnimation]
[[CCDirector sharedDirector] presentViewController:gcViewController animated:YES completion:nil];
然后在游戏中心视图中重新启动动画,关闭回调
- (void) gameCenterViewControllerDidFinish:(GKGameCenterViewController *)gameCenterViewController
{
[[CCDirector sharedDirector] dismissViewControllerAnimated:YES completion:nil];
[[CCDirector sharedDirector] startAnimation];
}
您的更新解决方案应该有效,但在此处相同,我不确定是否会有任何副作用。我想这是一种更安全的方法来绕过游戏中心本身。
再次感谢您发布此问题!