替换场景后,计划方法不再起作用

After replacing Scene, the Schedule method doesn't work anymore

本文关键字:方法 不再 起作用 计划 替换      更新时间:2023-10-16

我正在用cocos2dx制作一个游戏,所以我做了一个名为CoCoGui我还制作了一个从CCLayerColor继承游戏介绍页面的IntroPage类,以及一个从CCLayerColor继承的StartPage类。我想在前 2 秒显示介绍页面,然后显示StartingPage 但是在 CoCoGuiupdateGame函数(这是游戏的主循环)中,当调用replaceScene方法,并且Scene被替换时,updateGame 方法将不再被调用!请帮我解决这个问题谢谢!

这是CoCoGui.h文件: StartingPageIntroPage 是从 CCLayerColor 继承的两个类

#ifndef _COCOGUI_H_
#define _COCOGUI_H_
#include "StartingPage.h"
#include "..ClassesWorkSpace.h"
#include "..ClassesGameBoard.h"
#include "..ClassesIntroPage.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;
}

ReplaceScene 将触发this->onExit(),这将触发unschedule函数。

如果这类似于 cocos2d-iphone,则必须调用 onEnterTransitionDidFinish 的基类实现和类似的 onEnter/onExit 覆盖。在 cocos2d-iphone 中,不调用 super 中的某些方法可能会导致调度和输入停止工作。

尝试添加

this->resume();    

调用时间表后。

此外,请确保已加载连接到图层的场景。 否则,将导致运行时错误。