我是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(),但我想用回调块完成这个。
非常感谢任何帮助。
答案 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);
}