您的位置:首页 > 移动开发 > Cocos引擎

cocos2dx --- Action介绍 (二)

2013-05-15 16:30 176 查看
  有时需要指定在某一个时刻有谁执行某个动作,此时就有必要使用CCActionInstant继承树中一类特殊的类,即CCCallFunc家族。

  CCCallFunc家族主要有四个类:     

CCCallFunc *CCCallFunc::actionWithTarget(SelectorProtocol* pSelectorTarget,SEL_CallFunc selector);
CCCallFuncN *CCCallFuncN::actionWithTarget(SelectorProtocol* pSelectorTarget,SEL_CallFuncN selector);
CCCallFuncND *CCCallFuncND::actionWithTarget(SelectorProtocol* pSelectorTarget,SEL_CallFuncND selector, void* d);
CCCallFuncO *CCCallFuncO::actionWithTarget(SelectorProtocol* pSelectorTarget,SEL_CallFuncO selector, CCObject* pObject)


  这四个类对应了四个不同的函数接口;

typedef void (SelectorProtocol::*SEL_CallFunc)();
typedef void (SelectorProtocol::*SEL_CallFuncN)(CCNode*);
typedef void (SelectorProtocol::*SEL_CallFuncND)(CCNode*, void*);
typedef void (SelectorProtocol::*SEL_CallFuncO)(CCObject*);


  在使用此四类时,需要按需求使用上述4种回调函数的定义形式,并且对自定义的回调函数需用利用cocos2dx的宏一转换为函数指针类型,对应的宏定义:

#define callfunc_selector(_SELECTOR) (SEL_CallFunc)(&_SELECTOR)
#define callfuncN_selector(_SELECTOR) (SEL_CallFuncN)(&_SELECTOR)
#define callfuncND_selector(_SELECTOR) (SEL_CallFuncND)(&_SELECTOR)
#define callfuncO_selector(_SELECTOR) (SEL_CallFuncO)(&_SELECTOR)


  使用举例:

CCCurveMove* curveMove = CCCurveMove::create(fromtime,ccp(size.width - iRandPos_f, -size.height*0.5),sign*size.width*0.4,0.006);
CCCallFuncN *actDone = CCCallFuncN::actionWithTarget(this, callfuncN_selector(LeavesLayer::resetLeafPos));
CCFiniteTimeAction *putdown = CCSequence::actions(curveMove,actDone, NULL);
sprite->runAction(putdown);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: