Cocos2dx.如何在动画序列之后设置回调(传递参数)
cocos2dx. how to set a callback (passing an argument) after sequence of animations
我正在尝试在一系列动画之后设置一个动作,基本上我需要为方法使用一个对象(我想作为参数传递)。
我发现的唯一方法是使用CCCallFunc,据我所知,它不应该有参数。
是否存在一种 cocos2d/objective-c 的"callBlock"? 这是一个很棒的设置,我想知道 cocos2d-x 是否有类似的东西
代码如下:
CCCallFuncND *callBack = CCCallFuncND::create(this, callfuncND_selector(MyObject::method), data);
由于我尝试在仅使用静态函数的类(未初始化)中执行此操作,因此我无法使用"this",因此我尝试将其设置为NULL,但在这种情况下,我遇到了错误...
在运行一系列操作后,我必须做同样的事情:我想从 bacthNode 中删除精灵,这样我的动画帧就不会在动画结束时出现在屏幕上,所以我不得不将批处理节点传递给函数,这就是我实现它的方式:-
CCSequence *seq=CCSequence::createWithTwoActions(
CCAnimate::create(animation),
CCCallFuncO::create(
animation,
callfuncO_selector(GameLayer::animationReshuffleFinished),
(CCObject*)animBatchNode)
);
您需要的函数是CCCallFuncO而不是ND,这里的O代表对象。
CCCallFuncO::create(
animation,
callfuncO_selector(GameLayer::animationReshuffleFinished),
(CCObject*)animBatchNode)
其中animation
是我的 CCAnimate 对象 animationReshuffleFinished
是我的类 GameLayer 的回调函数,我希望在动画结束时调用它。(CCObject*)animBatchNode)
是函数动画重新洗牌完成的参数
这是函数的定义
void GameLayer::animationReshuffleFinished(CCObject *sender){
CCSpriteBatchNode *animBatchNode = (CCSpriteBatchNode*) sender;
animBatchNode->cocos2d::CCNode::removeAllChildrenWithCleanup(true);
}
请让我知道这是否符合您的目的。
你就是不能。如果你检查SEL_CallFuncXXX的定义,你会发现函数必须是CCObject的成员函数。
当前的 cocos2d-x 回调完全是从 cocos2d 复制而来的,但 Objective-C 的方式不适合C++。限制是:
1,如果传递具有多基类的对象,则可能无法正常工作。
2、不能传递在堆栈上分配的参数,如XXX::f(bool),不能在其中传递布尔值。
3,正如你提到的问题,回调函数mush是从CCObject派生的类的成员函数。所以静态函数或全局函数不能使用
也许你很好奇为什么他们不使用std::function和std::bind 代替,好吧,可能是他们复制cocos2d的速度太快了,没有时间考虑它。
- 如何将成员函数作为回调参数传递给需要"typedef-ed"自由函数指针的函数?
- C++存储带有可变参数的回调
- C++ 事件管理器的回调,使用 std::function 和 std:bind 以及派生类作为参数
- 以特征类型作为参数的泛型函数回调
- C++模板函数中,指定回调函子/lambda 的参数类型,同时仍允许内联?
- 模板化回调参数的逆变,如 C# 中的逆变
- 带有参数的嵌入式系统上的最小c++回调
- 如何用不同的参数类型和数字回调函数
- 如何成功地将函数对象(或lambda)传递给trackbar回调的第二个参数(void*)
- v8 源代码中 ArrayMap 函数的回调 fn 参数是什么?
- 如何将提升回调作为参数传递给方法?
- 回调参数中的协方差C++
- sqlite3 更改函数回调参数 void* not用于 int* C++
- 将lambda传递到lambda回调参数
- C++-17变量模板:捕获回调参数的返回类型和参数类型
- 回调参数被转移
- 脚本回调参数和结果的自动编组
- 在继承类中回调参数类型不匹配
- 将回调参数从c#传递到非托管c++
- 将此实例作为回调参数发送