Cocos2dx.如何在动画序列之后设置回调(传递参数)

cocos2dx. how to set a callback (passing an argument) after sequence of animations

本文关键字:回调 参数 设置 之后 动画 Cocos2dx      更新时间:2023-10-16

我正在尝试在一系列动画之后设置一个动作,基本上我需要为方法使用一个对象(我想作为参数传递)。

我发现的唯一方法是使用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的速度太快了,没有时间考虑它。