#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. На самом деле мне нужно получить доступ к слою, чтобы передать ему некоторые данные. Вот почему я делаю это наоборот.