我有一个基于UIButtons的UIKit菜单,当我点击其中一个时,我正在发射一个cocos2D场景。我正在AppDelegate中设置CCDirector:
if( ! [CCDirector setDirectorType:kCCDirectorTypeDisplayLink] )
[CCDirector setDirectorType:kCCDirectorTypeDefault];
CCDirector *director = [CCDirector sharedDirector];
[director setAnimationInterval:1.0/60];
[director setDisplayFPS:YES];
[CCTexture2D setDefaultAlphaPixelFormat:kCCTexture2DPixelFormat_RGBA8888];
并在rootViewController(将保存我的EAGLView的viewController)中我在viewDidLoad方法中执行此操作:
glView = [EAGLView viewWithFrame:self.view.bounds
pixelFormat:kEAGLColorFormatRGBA8
depthFormat:0
];
glView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
[self.view insertSubview:glView atIndex:0];
[[CCDirector sharedDirector] setOpenGLView:glView];
CCScene *scene = [GameScene sceneWithParent:self];
[[CCDirector sharedDirector] runWithScene:scene];
我在MainMenuViewController中设置我的菜单,从中我将NavigationViewController推送到navigationController的堆栈中。这完美地运行,我的游戏开始没有问题。我还可以从RootViewController(它包含cocos2d场景)返回一个UIButton:- (IBAction)goBack {
[self.navigationController popViewControllerAnimated:YES];
[[CCDirector sharedDirector] end];}
但是当我尝试重新加载我的游戏场景时,应用程序退出了。我尝试过这种方法: restart CCDirector但是徒劳!我试图暂停CCDirector并重新启动动画,但也是徒劳的,我得到的错误与cocos2d的绘制方法有关!! 请帮忙
答案 0 :(得分:0)
我刚刚解决了我的问题。因此,如果您尝试使用UINavigationController,则不必使用[[CCDirector sharedDirector] end]
,因为当rootController从堆栈中加载时,cocos2d world的所有场景都将被释放。但是如果你想要只删除子视图(不是孔控制器),你必须结束CCDirector!我的问题出现在我作为GameScene的孩子添加的单例类中,当我结束CCDirector时它仍然存在于内存中,因此我必须在重新创建游戏场景之前释放它。希望这很清楚。