Cocos2d回调函数

Cocos2d callback function

本文关键字:函数 回调 Cocos2d      更新时间:2023-10-16

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

我在游戏场景中有一个功能,我想暂停游戏,创建一个PauseScene实例和

void GameScene::pauseButtonCallback() {
    Director::getInstance()->pause();
    auto callbackResume = CallFunc::create([=](){
        GameScene::resumeGame();
    });
    auto pauseScene = PauseScene::createSceneWithCloseCallback(callbackResume);
    this->addChild(pauseScene, 5);
}

暂停场景.h

Scene* createSceneWithCloseCallback(CallFunc *callback);

不幸的是,我在调用PauseScene::createSceneWthCloseCallback(callbackResume)的行上遇到了一个错误,格式为:

"调用没有对象参数的非静态成员函数?"

这里的想法是,我会在实例化PauseScene时设置一个回调块,稍后当玩家点击恢复按钮时会调用该块。

此外,我知道PauseScene是GameScene的子代,我可以走捷径,只执行parent->function(),但我想用回调块来实现这一点。

如有任何帮助,我们将不胜感激。

我能够通过查看MenuItemImage::create的实现来实现我想要的。

我使用了ccMenuCallback,它被定义为typedef std::函数ccMenuCallback;

在我的暂停场景声明

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