Ios 为新场景重用控制器

Ios 为新场景重用控制器,ios,cocos2d-x,Ios,Cocos2d X,我目前正在开发一款Cocos2d-x,除了游戏之外,它还使用本机UI(UIKit框架) 这是我的实际工作流程: 当我开始比赛时,一切都很顺利。我甚至可以通过重新初始化场景来重新启动游戏,但我不能用我的视图弹出UIViewController并再次将其推到顶部 当我这样做的时候,我得到了一个没有任何运动的场景。 下面是我打开场景的步骤: if (cocos2d::Director::getInstance()->getRunningScene() && [[self.

我目前正在开发一款Cocos2d-x,除了游戏之外,它还使用本机UI(UIKit框架)

这是我的实际工作流程:

当我开始比赛时,一切都很顺利。我甚至可以通过重新初始化场景来重新启动游戏,但我不能用我的视图弹出UIViewController并再次将其推到顶部

当我这样做的时候,我得到了一个没有任何运动的场景。 下面是我打开场景的步骤:

    if (cocos2d::Director::getInstance()->getRunningScene() && [[self.view.subviews firstObject] isKindOfClass:[CCEAGLView class]]) {

    //Restart scene without popping ViewController
    //Works well
    auto beam = GrowingBeam::createLayer();
    auto scene = beam->getScene();
    beam->_self  = (__bridge void*) self;
    cocos2d::Director::getInstance()->replaceScene(scene);
}else {


    if (cocos2d::Director::getInstance()->getRunningScene()) {

        //Restart scene after View Controller has been popped
        // DOESN'T WORK !!
        auto beam = GrowingBeam::createLayer();
        auto scene = beam->getScene();

        beam->_self  = (__bridge void*) self;

        [self.view insertSubview:(__bridge CCEAGLView *) cocos2d::Director::getInstance()->getOpenGLView()->getEAGLView() atIndex:0];
        cocos2d::Director::getInstance()->replaceScene(scene);
        scene->resume();
        cocos2d::Director::getInstance()->resume();
    }else {

        //Start Scene for the first time
        //Works well
        CCEAGLView *eaglView = [CCEAGLView viewWithFrame: [UIScreen mainScreen].bounds
                                             pixelFormat: kEAGLColorFormatRGBA8
                                             depthFormat: GL_DEPTH24_STENCIL8_OES
                                      preserveBackbuffer: NO
                                              sharegroup: nil
                                           multiSampling: NO
                                         numberOfSamples: 0];

        // IMPORTANT: Setting the GLView should be done after creating the RootViewController
        auto gl2view = cocos2d::GLView::createWithEAGLView((__bridge void*)eaglView);
        cocos2d::Director::getInstance()->setOpenGLView(gl2view);

        [self.view insertSubview:eaglView atIndex:0];

        auto beam = GrowingBeam::createLayer();
        auto scene = beam->getScene();
        beam->_self  = (__bridge void*) self;

        cocos2d::Director::getInstance()->runWithScene(scene);
        cocos2d::Application::getInstance()->run();

    }

}

我做了类似的事情,但是他们检查了
if(cocos2d::Director::getInstance()->getRunningScene())
。同样有趣的是,您显然在
GrowingBeam
中创建了一个层,该层有一个场景对象。我以前从未见过这样做。通常人们用另一种方式来做。实际上,我必须访问该层以向其传递一些数据。这就是为什么我要反过来做。