【问题标题】:Push a Viewcontroller in a cocos2D scene在 cocos2D 场景中推送 Viewcontroller
【发布时间】:2013-01-20 20:08:16
【问题描述】:

我有一个应用程序。这个应用结合了 UIKit 和 Cocos2D。 我有一个 UIKit 菜单,带有一个调用 cocos2D 游戏的按钮。它工作正常。

现在,我想移除 cocos 场景来推送 UIKit 菜单。 (游戏结束,需要进入菜单视图)

我试过了

[[CCDirector sharedDirector] end];
[[CCDirector sharedDirector].openGLView removeFromSuperview];

它不起作用。我不知道该怎么做。

感谢您的帮助!

【问题讨论】:

  • 从 superview 中删除后究竟会发生什么?它是留在屏幕上还是只是一片黑色?
  • 从超级视图中删除后,我的 cocos2D 视图只是“冻结”了。
  • 您是否尝试向应用程序窗口添加新视图?我理解它的方式是这样的:创建了一个 EAGLView 并添加了 CCDirector ..当导演结束时,您需要从 superview 手动删除视图(您已经这样做了)但是现在应用程序的窗口没有视图..所以你需要添加一个
  • 你使用哪个版本的 cocod2d,1.x 还是 2.x?在 cocos2d 2.x 中,CCDirector 是 UIViewController 的子类。

标签: iphone cocos2d-iphone uikit


【解决方案1】:

在 cocos2d 2.0 及更高版本中试试这个:

展示视图控制器:

AppController *app = (AppController*) [[UIApplication sharedApplication] delegate];    

//presentModalViewController 
[app.navController presentModalViewController:leaderboardViewController animated:YES];

//dismissModalViewControllerAnimated:YES
[app.navController dismissModalViewControllerAnimated:YES];

添加子视图:

AppController *app = (AppController*) [[UIApplication sharedApplication] delegate];
[app.navController.view addSubview:mSegmentedControl];

【讨论】:

    【解决方案2】:

    尝试做这样的事情。 当你在 uiviewcontroller 上推送 cocos 场景时,请在 ViewDidLoad 方法中添加此代码。

    -(void)viewDidLoad{
    [super viewDidLoad];
    CCDirector *director = [CCDirector sharedDirector];
    
    if([director isViewLoaded] == NO)
    {
    
    CCGLView *glView = [CCGLView viewWithFrame:[[[UIApplication sharedApplication] keyWindow] bounds]
                                   pixelFormat:kEAGLColorFormatRGB565
                                   depthFormat:0
                            preserveBackbuffer:NO
                                    sharegroup:nil
                                 multiSampling:NO
                               numberOfSamples:0];
    
    
    director.view = glView;
    
    
    [director setAnimationInterval:1.0f/60.0f];
    [director enableRetinaDisplay:YES];
    }
    
    director.delegate = self;
    [self addChildViewController:director];
    [self.view addSubview:director.view];
    
    
    
    [director didMoveToParentViewController:self];
    
    
    if(director.runningScene)
    {
    
    [director replaceScene:[SceneFirst scene]];
    }
    else
    {
    
    [director runWithScene:[SceneFirst scene]];
    }
    
    }
    

    这里的 SceneFirst 是你要推送的 cocos 场景。只需在你的 UiViewController 中添加 CCDirectorDelegate 作为委托。 并在您的 ViewDidUnload 方法中添加这行代码

    [[CCDirector sharedDirector] setDelegate:nil];
    

    要弹回您的 Uikit 视图,请在任何点击的 CCmenu 上调用此代码

    [[CCDirector sharedDirector] stopAnimation];
    AppDelegate *app = (AppDelegate *)[[UIApplication sharedApplication] delegate];
    [app.navigationController popViewControllerAnimated:YES];
    

    希望有帮助!!:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多