После замены Scene метод Schedule больше не работает

Я делаю игру в cocos2dx, поэтому я сделал класс с именем CoCoGui
и я также сделал IntroPage класс, который наследуется от CCLayerColor для вступительной страницы игры и StartPage класс, который был унаследован от CCLayerColor, тоже.
Я хочу показать начальную страницу в течение первых 2 секунд, а затем показать StartingPage
но в updateGame функция CoCoGui (что является основным циклом игры), когда replaceScene метод называется, и Scene заменить, updateGame метод больше не будет вызываться!
Пожалуйста, помогите мне с этой проблемой
Спасибо!

Вот файл CoCoGui.h:
StartingPage а также IntroPage два класса, которые наследуются от CCLayerColor

#ifndef _COCOGUI_H_
#define _COCOGUI_H_

#include "StartingPage.h"#include "..\Classes\WorkSpace.h"#include "..\Classes\GameBoard.h"#include "..\Classes\IntroPage.h"using namespace cocos2d;

class CoCoGui : public CCLayerColor{

public:
CoCoGui();
void addScene (CCScene * startPage, CCScene * work);
virtual ~CoCoGui(void);
void updateGame ( float dt );
virtual bool init();
static CCScene* scene();
CREATE_FUNC(CoCoGui);
private:
bool isInit;
CCScene * runnigScene;
IntroPage * introPage;
StartingPage * startingPage;
void onEnterTransitionDidFinish();
void menuCloseCallback(CCObject* pSender);
public:
CCScene * getRunningScene(void);
};

#endif /* COCOGUI_H */

также здесь есть файл CoCoGui.cpp

#include "CoCoGui.h"#include <iostream>
using namespace std;
CCScene* CoCoGui::scene(){
CCScene *scene = CCScene::create();
CoCoGui *layer = CoCoGui::create();

scene->addChild(layer);

return scene;
}

CoCoGui::CoCoGui ( )
{
this->isInit = false;
this->introPage = new IntroPage ( );
this->startingPage = new StartingPage ( );
}

CoCoGui::~CoCoGui(void)
{
delete introPage;
delete startingPage;
}

void CoCoGui::menuCloseCallback(CCObject* pSender)
{
CCDirector::sharedDirector()->end();

#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
exit(0);
#endif
}

bool CoCoGui::init ( ){
if ( !CCLayerColor::initWithColor ( ccc4 (100,100,100,255) ) ){
return false;
}
this->schedule ( schedule_selector ( CoCoGui::updateGame ), 0.5 );
return true;
}

void CoCoGui::updateGame ( float dt ){
cout << "Update Called" << endl;
if ( !isInit )
return;
CCScene * scene = NULL;
if ( !this->introPage->isIntroPageDone ( ) ){
scene = IntroPage::scene();
}
else if ( this->introPage->isIntroPageDone ( )  ){
scene = StartingPage::scene();
}
CCDirector::sharedDirector()->replaceScene(scene);
}

void CoCoGui::onEnterTransitionDidFinish ( ){
isInit = true;
}CCScene * CoCoGui::getRunningScene(void)
{
return this->runnigScene;
}

3

Решение

Если это что-то вроде cocos2d-iphone, вам нужно вызвать реализацию onEnterTransitionDidFinish для базового класса и аналогичные переопределения onEnter / onExit. В cocos2d-iphone не вызов супер в некоторых из этих методов может привести к тому, что планирование и ввод перестанут работать.

1

Другие решения

ReplaceScene вызовет this->onExit() который сработает unschedule функция.

2

попробуйте добавить

this->resume();

после вызова графика.

Также убедитесь, что сцена, подключенная к слою, загружена. Если нет, это приведет к ошибке во время выполнения.

0