c++ - gratis - Después de reemplazar Scene, el método Schedule ya no funciona
cocos2d tutorial (3)
ReplaceScene activará this->onExit()
que desencadenará la función de unschedule
.
Estoy haciendo un juego en cocos2dx, así que hice una clase llamada CoCoGui
y también hice una clase IntroPage
que hereda de CCLayerColor
para la página de introducción del juego y una clase de StartPage
que también heredó de CCLayerColor
. Quiero mostrar la página de introducción durante los primeros 2 segundos y luego mostrar el StartingPage
pero en la función updateGame
de CoCoGui
(que es el loop principal del juego), cuando se replaceScene
método replaceScene
y se reemplaza la Scene
, el método updateGame
no será llamado más! Por favor ayúdenme con este problema gracias!
Aquí está el archivo CoCoGui.h: StartingPage
e IntroPage
son dos clases que heredan de 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 */
también aquí está el archivo 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;
}
Si esto es algo así como cocos2d-iphone, tendrá que llamar a la implementación de la clase base de onEnterTransitionDidFinish y anulaciones onEnter / onExit similares. En cocos2d-iphone no llamar súper en algunos de estos métodos puede causar programación y entrada para dejar de funcionar.
intente agregar
this->resume();
después de llamar al horario.
También asegúrese de que la escena conectada a la capa esté cargada. Si no, causará un error de tiempo de ejecución.