cocos2dx 中的SEL_Callfunc,SEL_CallfuncN,SEL_CallfuncNd的用法

1,进入这三个源码中,可以看到这几句代码分别为

typedef void (CCobject::*SEL_SCHEDULE)(float); //函数指针,函数有一个参数float,返回类型为void

typedef void (CCobject::*SEL_CallFunc)(); //函数指针,函数无参数,返回类型为void

typedef void (CCobject::*SEL_CallFuncN)(CCNode*) //函数指针,函数有一个参数,返回类型为void

typedef void (CCobject::*SEL_CallFuncND)(CCNode*,void*); /函数指针,函数有一个参数,返回类型为void

typedef void (CCobject::*SEL_CallFuncND)(CCNode*,void*); /函数指针,函数有两个参数,返回类型为void

typedef void (CCobject::*SEL_CallFuncO)(CCObject*); /函数指针,函数有一个参数,返回类型为void

typedef void (CCObject::SEL_MenuHandler)(CCObject*);// 函数指针,函数有一个参数,返回类型为void 

2,这些都是Cocos2dx中定义的宏

#define schedule_selector(_SELECTOR) (SEL_SCHEDULE)(&_SELECTOR)

#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)

#define menu_selector(_SELECTOR) (SEL_MenuHandler)(&_SELECTOR)

3,下面看一些经常使用的方法

void Daojishi(float dt);//必须要有参数才能调用update

我们可能都会用到,如 this->schedule(schedule_selector(myTest::Daojishi));

void add(CCobject * pSender);

或者item->setTarget(menu_selector(myTest::add));

CCNode * node 

SEL_CallFuncND selectorND;// 函数指针

或者 CCObject *pSelectorTarget; SEL_SCHEDULE selector;



4,如果我们自己定义个回调函数,可以这样来写

void init(CCObject* _pSelectorTarget,Sel_Schedule _selector)
{
   pSelectorTarget = _pSelecotrTarget.
   selector = _pSelector;
}
(pSelectorTarget -> *selector) (f_time) 函数指针调用传递参数


void ArmatureSprite::ArmatureAttackcall(CCNode* _pNode1,SEL_CallFuncND _pselector1,void *_pd1,CCNode* _pNode2,SEL_CallFuncND _pselector2,void* _pd2){

    

    pNode1 = _pNode1;

    pSelector1 = _pselector1;

    pD1 = _pd1;

    

    pNode2 = _pNode2;

    pSelector2 = _pselector2;

    pD2 = _pd2;

    

_armatureBaoZha->ArmatureAttackcall(NULL, NULL, NULL, this, callfuncND_selector(BaseSpecialEffectsGetReward::HD_OpenStarBox), tempStr);

}

                                        menu_selector(HelloWorld::menuCloseCallback));

Object::*SEL_Cal

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值