从UIKit菜单重新启动cocos2d的场景



我有一个基于 UIButtons 的 UIKit 菜单,当我点击其中一个时,我正在发射一个 cocos2D 场景。 我正在应用程序代表中设置 CCDirector:

if( ! [CCDirector setDirectorType:kCCDirectorTypeDisplayLink] )
    [CCDirector setDirectorType:kCCDirectorTypeDefault];
CCDirector *director = [CCDirector sharedDirector];
[director setAnimationInterval:1.0/60];
[director setDisplayFPS:YES];
[CCTexture2D setDefaultAlphaPixelFormat:kCCTexture2DPixelFormat_RGBA8888];

在根视图控制器(将保存我的EAGLView的视图控制器)中,我在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 中设置我的菜单,从那里我将 RootViewController 推到导航控制器的堆栈中。这运行良好,我的游戏启动没有问题。我也可以从 RootViewController (保存 cocos2d 场景) 返回 UIButton: - (IBAction)goBack { [self.navigationController popViewControllerAnimated:YES]; [[CCDirector sharedDirector] end];}

但是当我尝试重新加载我的游戏场景时,应用程序退出了。 我试过这种方法: 重新启动CCDirector,但徒劳无功!!我试图暂停CCDirector并重新启动动画,但也是徒劳的,我得到的错误与cocos2d的绘制方法有关!!请帮忙

我刚刚解决了我的问题。 所以如果你尝试使用 UINavigationController 你不必使用 [[CCDirector sharedDirector] end] ,因为当 rootController 从堆栈中弹出时,cocos2d 世界的所有场景都会被释放出来。但是,如果您尝试仅删除子视图(而不是孔控制器),则必须结束CCDirector!!我的问题是在我作为 GameScene 的孩子添加的单例类中,当我结束 CCDirector 时,它仍然存在于内存中,所以我不得不在重新创建游戏场景之前释放它。希望这是清楚的。

最新更新