tutorial gratis games cocos2d c++ cocos2d-iphone cocos2d-x

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.