2015-12-27 99 views
0

我是cocos2d編程的新手,儘管我已經用C++編程(17年以前),但很多已經改變了,我正在爲基礎努力奮鬥。Cocos2d回調函數

我在gamescene的功能,我想暫停遊戲,創建一個PauseScene實例和

void GameScene::pauseButtonCallback() { 
    Director::getInstance()->pause(); 

    auto callbackResume = CallFunc::create([=](){ 
     GameScene::resumeGame(); 
    }); 

    auto pauseScene = PauseScene::createSceneWithCloseCallback(callbackResume); 

    this->addChild(pauseScene, 5); 
} 

PauseScene.h

Scene* createSceneWithCloseCallback(CallFunc *callback); 

不幸的是,我上線那裏得到一個錯誤我以下面的形式調用PauseScene :: createSceneWthCloseCallback(callbackResume):

「不帶對象參數的非靜態成員函數調用?」

這裏的想法是當實例化PauseScene時設置一個回調塊,稍後在玩家點擊繼續按鈕時被調用。

另外我知道,PauseScene是GameScene的孩子,我可以採取一個快捷方式,只是做parent-> function(),但我想用回調塊來實現這一點。

任何幫助將不勝感激。

+0

您應該使用「cococs2d- x'或'cocos2dx'標記而不是'cocos2d-iphone'。 – Emadpres

回答

0

我能夠通過查看MenuItemImage :: create的實現來完成我在尋找的內容。

我用ccMenuCallback定義爲 typedef std :: function ccMenuCallback;

在我PauseScene聲明

ccMenuCallback resumeCallback; 

virtual bool init(); 

CREATE_FUNC(PauseScene); 

static PauseScene* createSceneWithCloseCallback(const ccMenuCallback& callback); 

的創建方法來設置回調:

PauseScene* PauseScene::createSceneWithCloseCallback(const ccMenuCallback& callback) { 
    PauseScene *ret = new (std::nothrow) PauseScene(); 

    if (ret && ret->init()) { 
     ret->autorelease(); 
     ret->resumeCallback = callback; 
     return ret; 
    } 
    CC_SAFE_DELETE(ret); 
    return nullptr; 
} 

,然後調用實際回調:

void PauseScene::resumeButtonCallback() { 
    this->removeFromParent(); 

    this->resumeCallback(this); 
}