c++ - cocos2d-x v3 CallFunc 作为参数/变量如何

标签 c++ callback cocos2d-x

我正在将我的 V1 cocos2d-x 应用程序更新到 V3,但我卡在了回调上。

我可以像这样使用 lambda 进行回调,效果很好 -

auto mcb = CallFunc::create([this](){
    this->doCallback(kEVENT_MENU_IS_ONSCREEN);
});

hex->runAction(Sequence::create(somethingthattakestime, mcb, NULL) );

但是,我想将 CallFunc 变量传递给函数,将其存储在我的对象中,然后在将来的某个时间点使用/调用它。

在我定义的类中-

CallFunc * callfunc;

设置一个简单的-

item->callfunc = callfunc;

在函数内 -

void LBMenuAddMenuItemName( CallFunc * callfunc );

我还将 CallFunc 变量声明为静态的,因此它会挂起 -

static auto doSoloPlay = CallFunc::create([this](){
  CCLOG("doSoloPlay variable");
  this->menuSoloPlay();
});

稍后当我想使用它时,我会 -

Sequence * seq = Sequence::create(callfunc,NULL);
somesprite->runAction(seq);

然而,这以 SIGSEGV (GLThread) 结束。

使用 typeid(callfunc).name() 表明 callfunc 是一个 CallFunc。在声明中使用 setTag(69),然后在 SIGSEGV 之前使用 getTag() 不会返回合理的值。

有人可以解释我做错了什么以及延迟回调的正确方法吗?

谢谢!

最佳答案

尝试了很多东西然后发现当我在声明后执行'retain()'时这个错误消失了-

doSoloPlay->retain();

这会增加引用计数。

我不太清楚我为什么需要这个。我的猜测是 cocos2d-x 类可能会进行一些巧妙的垃圾收集?

关于c++ - cocos2d-x v3 CallFunc 作为参数/变量如何,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40085987/

相关文章:

c++ - 渲染到 CCRenderTexture 不工作

c++ - Qt for Nokia 中的样式表

c++ - 解析复杂的字符串

c# - 内联代码执行完成后是否将[写入其中的]方法保留在内存中?

ios - Swift 字典不想从 C 回调函数填充

iOS 将 Cocos2Dx 场景录制为视频

android - 删除 unsigned char* 缓冲区

c++ - 是否可以在已分配的内存上初始化 std::vector ?

c++ - 关于C++中函数调用和求值的问题

java - 如何将回调函数从Java传递到Kotlin类