我正在尝试在一系列动画之后设置动作,基本上我需要使用一个对象(我想作为参数传递)用于方法。
我发现的唯一方法就是使用CCCallFunc(据我所知),它不应该有参数。
是否存在cocos2d / objective-c的某种“callBlock”?那是一个很棒的人,我想知道是否有类似cocos2d-x的东西
这是代码:
CCCallFuncND *callBack = CCCallFuncND::create(this, callfuncND_selector(MyObject::method), data);
因为我试图在一个类(没有初始化)中只使用静态函数来做它我不能使用“this”所以我试着把它设置为NULL但是在这种情况下我得到了一个错误......
答案 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太快而没有时间考虑它。