3

私は cocos2dx でゲームを作っているので、 という名前のクラスを作成し、ゲームの紹介ページ用にを継承するクラスと、 から継承したクラスCoCoGui も作成しました。最初の 2 秒間はイントロ ページを表示してから、 (ゲームのメイン ループである) の関数を表示したいのですが、メソッドが呼び出されて置き換えられると、メソッドは呼び出されなくなります。 ! この問題で私を助けてくださいありがとう!IntroPageCCLayerColorStartPageCCLayerColorStartingPageupdateGameCoCoGuireplaceSceneSceneupdateGame

CoCoGui.h ファイルは次のとおりです。 StartingPageIntroPageは、から継承する 2 つのクラスです。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;
}
4

3 に答える 3

2

ReplaceScene は which will tr​​igger関数this->onExit()をトリガーしunscheduleます。

于 2012-12-10T23:52:32.643 に答える
1

これが cocos2d-iphone のようなものである場合、onEnterTransitionDidFinish および同様の onEnter/onExit オーバーライドの基本クラス実装を呼び出す必要があります。cocos2d-iphone では、これらのメソッドの一部で super を呼び出さないと、スケジューリングと入力が機能しなくなる可能性があります。

于 2012-12-11T11:20:25.390 に答える