Cocos2d回调函数

时间:2015-12-27 02:05:34

标签: c++ c++11 cocos2d-iphone

我是cocos2d编程的新手,尽管我已经用C ++编程(17年前),但很多东西已经改变了,我正在努力学习基础知识。

我在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的孩子,我可以选择一个快捷方式,只做父 - >> function(),但我想用回调块完成这个。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

通过查看MenuItemImage :: create的实现,我能够完成我想要的工作。

我使用了定义为的ccMenuCallback     typedef std :: function ccMenuCallback;

在我的PauseScene声明中

ccMenuCallback resumeCallback;

virtual bool init();

CREATE_FUNC(PauseScene);

static PauseScene* createSceneWithCloseCallback(const ccMenuCallback& callback);

设置回调的create方法:

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);
}