Директор повторного использования для новой сцены

#ios #cocos2d-x

#iOS #cocos2d-x

Вопрос:

В настоящее время я работаю над Cocos2d-x, который помимо игры использует собственный пользовательский интерфейс (UIKit Framework).

Это мой фактический рабочий процесс:

Когда я запускаю игру, все работает хорошо. Я даже могу перезапустить игру, повторно инициализировав сцену, но я не могу открыть UIViewController с помощью моего CCEAGLView и снова нажать его сверху.

Когда я делаю это, я получаю сцену без какого-либо движения. Вот мой открывает сцену:

     if (cocos2d::Director::getInstance()->getRunningScene() amp;amp; [[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();

    }

}
  

Комментарии:

1. Я делаю что-то подобное, но они проверяют if (cocos2d::Director::getInstance()->getRunningScene()) . Также интересно, что вы, по-видимому, создаете слой в GrowingBeam , в котором есть объект сцены, который вы делаете после. Я раньше не видел, чтобы это делалось таким образом. обычно люди делают это наоборот.

2. На самом деле мне нужно получить доступ к слою, чтобы передать ему некоторые данные. Вот почему я делаю это наоборот.