cocos2dx --- Action介绍 (二)
有时需要指定在某一个时刻有谁执行某个动作,此时就有必要使用CCActionInstant继承树中一类特殊的类,即CCCallFunc家族。
CCCallFunc家族主要有四个类:
1 CCCallFunc *CCCallFunc::actionWithTarget(SelectorProtocol* pSelectorTarget,SEL_CallFunc selector);
2 CCCallFuncN *CCCallFuncN::actionWithTarget(SelectorProtocol* pSelectorTarget,SEL_CallFuncN selector);
3 CCCallFuncND *CCCallFuncND::actionWithTarget(SelectorProtocol* pSelectorTarget,SEL_CallFuncND selector, void* d);
4 CCCallFuncO *CCCallFuncO::actionWithTarget(SelectorProtocol* pSelectorTarget,SEL_CallFuncO selector, CCObject* pObject)
这四个类对应了四个不同的函数接口;
1 typedef void (SelectorProtocol::*SEL_CallFunc)();
2 typedef void (SelectorProtocol::*SEL_CallFuncN)(CCNode*);
3 typedef void (SelectorProtocol::*SEL_CallFuncND)(CCNode*, void*);
4 typedef void (SelectorProtocol::*SEL_CallFuncO)(CCObject*);
在使用此四类时,需要按需求使用上述4种回调函数的定义形式,并且对自定义的回调函数需用利用cocos2dx的宏一转换为函数指针类型,对应的宏定义:
1 #define callfunc_selector(_SELECTOR) (SEL_CallFunc)(&_SELECTOR) 2 #define callfuncN_selector(_SELECTOR) (SEL_CallFuncN)(&_SELECTOR) 3 #define callfuncND_selector(_SELECTOR) (SEL_CallFuncND)(&_SELECTOR) 4 #define callfuncO_selector(_SELECTOR) (SEL_CallFuncO)(&_SELECTOR)
使用举例:
1 CCCurveMove* curveMove = CCCurveMove::create(fromtime,ccp(size.width - iRandPos_f, -size.height*0.5),sign*size.width*0.4,0.006); 2 CCCallFuncN *actDone = CCCallFuncN::actionWithTarget(this, callfuncN_selector(LeavesLayer::resetLeafPos)); 3 CCFiniteTimeAction *putdown = CCSequence::actions(curveMove,actDone, NULL); 4 sprite->runAction(putdown);