Ios 为新场景重用控制器
我目前正在开发一款Cocos2d-x,除了游戏之外,它还使用本机UI(UIKit框架) 这是我的实际工作流程: 当我开始比赛时,一切都很顺利。我甚至可以通过重新初始化场景来重新启动游戏,但我不能用我的视图弹出UIViewController并再次将其推到顶部 当我这样做的时候,我得到了一个没有任何运动的场景。 下面是我打开场景的步骤:Ios 为新场景重用控制器,ios,cocos2d-x,Ios,Cocos2d X,我目前正在开发一款Cocos2d-x,除了游戏之外,它还使用本机UI(UIKit框架) 这是我的实际工作流程: 当我开始比赛时,一切都很顺利。我甚至可以通过重新初始化场景来重新启动游戏,但我不能用我的视图弹出UIViewController并再次将其推到顶部 当我这样做的时候,我得到了一个没有任何运动的场景。 下面是我打开场景的步骤: if (cocos2d::Director::getInstance()->getRunningScene() && [[self.
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
中创建了一个层,该层有一个场景对象。我以前从未见过这样做。通常人们用另一种方式来做。实际上,我必须访问该层以向其传递一些数据。这就是为什么我要反过来做。