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

时间:2013-11-14 23:12:20

标签: c++ callback arguments cocos2d-x

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

我发现的唯一方法就是使用CCCallFunc(据我所知),它不应该有参数。

是否存在cocos2d / objective-c的某种“callBlock”?那是一个很棒的人,我想知道是否有类似cocos2d-x的东西

这是代码:

CCCallFuncND *callBack = CCCallFuncND::create(this, callfuncND_selector(MyObject::method), data);

因为我试图在一个类(没有初始化)中只使用静态函数来做它我不能使用“this”所以我试着把它设置为NULL但是在这种情况下我得到了一个错误......

2 个答案:

答案 0 :(得分:2)

在运行一系列动作之后我必须做同样的事情:我想从bacthNode中删除精灵,这样我的动画帧就不会出现在屏幕上,因为动画结束了所以我不得不将批处理节点传递给功能,这就是我实现它的方式: -

CCSequence *seq=CCSequence::createWithTwoActions(
    CCAnimate::create(animation), 
    CCCallFuncO::create(
        animation, 
        callfuncO_selector(GameLayer::animationReshuffleFinished),
        (CCObject*)animBatchNode)
);

你需要的功能是CCCallFuncO而不是ND,这里O代表Object。

CCCallFuncO::create(
    animation,
    callfuncO_selector(GameLayer::animationReshuffleFinished),
    (CCObject*)animBatchNode)

其中animation是我的CCAnimate对象 animationReshuffleFinished是我的GameLayer类的回调函数,我希望在动画结束时调用它。 而(CCObject*)animBatchNode)是函数animationReshuffleFinished

的参数

这是函数的定义

 void GameLayer::animationReshuffleFinished(CCObject *sender){
    CCSpriteBatchNode *animBatchNode = (CCSpriteBatchNode*) sender;
    animBatchNode->cocos2d::CCNode::removeAllChildrenWithCleanup(true);
    }

如果这符合您的目的,请告诉我。

答案 1 :(得分:1)

你不能。如果检查SEL_CallFuncXXX的定义,您将发现函数必须是CCObject的成员函数。

当前的cocos2d-x回调完全是从cocos2d复制的,但Objective-C方式不适合C ++。限制是:

如果传递具有多个基类的对象,则

1可能不起作用。

2,不能传递分配在堆栈上的参数如XXX :: f(bool),你不能在其中传递bool。

3,正如您提到的那样,回调函数就是从CCObject派生的类的成员函数。所以静态函数或全局函数不能使用

可能你很好奇他们为什么不使用std :: function&相反,std :: bind可能是他们复制cocos2d太快而没有时间考虑它。