2012-12-10 19 views
3

我做在cocos2dx一場比賽,所以我做了一個名爲類CoCoGui 和我也做了IntroPage類,從CCLayerColor繼承的介紹遊戲頁面以及從CCLayerColor繼承的StartPage類。 我要顯示的介紹頁面爲第2秒鐘,然後顯示StartingPage 但在CoCoGuiupdateGame功能(這是遊戲的主循環)中,當調用replaceScene方法和Scene成爲更換, updateGame方法將不會再被調用! 請幫我解決這個問題 謝謝!更換場景之後,Schedule方法不工作了

這裏的CoCoGui.h文件: StartingPageIntroPage是從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; 
} 
+0

嘗試理解cocos2d在開始編程之前如何通過CCDirector處理CCScene,CCLayer和節點。確保您知道何時啓動場景,在進入場景之前調用了哪些默認功能,以及在離開場景後調用了哪些功能。有2本書非常好:Cocos2d for iPhone遊戲開發手冊/學習iOS 5的cocos2d遊戲開發。cocos2d-x使用與cocos2d相同的方式 –

回答

1

如果這與cocos2d-iphone一樣,您必須調用onEnterTransitionDidFinish的基類實現以及類似的onEnter/onExit覆蓋。在這些方法中的某些方法中,cocos2d-iphone沒有調用super可能導致調度和輸入停止工作。

+0

那麼,您能否給我一個例子來做到這一點?我有點兒用cocos2dx初學,我不知道該如何處理。 – kianoosh

2

兩個班的ReplaceScene將觸發this->onExit()這將觸發unschedule功能。

0

嘗試調用時間表後加入

this->resume();  

還要確保連接到該圖層的場景已加載。如果不是,則會導致運行時錯誤。