0

我有一个基于 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 中设置我的菜单,从那里我将 RootViewController 推送到 navigationController 的堆栈中。这非常有效,我的游戏开始时没有问题。我也可以从 RootViewController (包含 cocos2d 场景)返回 UIButton:- (IBAction)goBack { [self.navigationController popViewControllerAnimated:YES]; [[CCDirector sharedDirector] end];}

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

4

1 回答 1

0

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

于 2012-11-15T13:36:37.637 回答