天天看点

cocos2d-x的各种回调函数

1       typedef void (CCObject::*SEL_SCHEDULE)(float);

2 typedef void (CCObject::*SEL_CallFunc)();

3 typedef void (CCObject::*SEL_CallFuncN)(CCNode*);

4 typedef void (CCObject::*SEL_CallFuncND)(CCNode*, void*);

5 typedef void (CCObject::*SEL_CallFuncO)(CCObject*);

6 typedef void (CCObject::*SEL_MenuHandler)(CCObject*);

7 typedef void (CCObject::*SEL_EventHandler)(CCEvent*);

8 typedef int (CCObject::*SEL_Compare)(CCObject*);

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

10 #define callfunc_selector(_SELECTOR) (SEL_CallFunc)(&_SELECTOR)

11 #define callfuncN_selector(_SELECTOR) (SEL_CallFuncN)(&_SELECTOR)

12 #define callfuncND_selector(_SELECTOR) (SEL_CallFuncND)(&_SELECTOR)

13 #define callfuncO_selector(_SELECTOR) (SEL_CallFuncO)(&_SELECTOR)

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

15 #define event_selector(_SELECTOR) (SEL_EventHandler)(&_SELECTOR)

16 #define compare_selector(_SELECTOR) (SEL_Compare)(&_SELECTOR)

其实这些都是函数的指针,例如第一个和9拿出来

typedef void (CCObject::*SEL_SCHEDULE)(float);

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

先看上面 顶一了一个 指向CCobject指针的指针,这个指针指向一个带一个float类型的参数的返回值为void的函数 接着下面的宏替换 当我们scedule_selector(xxxxxx);时 自动替换成  

 (SEL_SCHEDULE)(&_SELECTOR)

将我们传进来的_SELECTOR函数指针强制转换成    指向一个带一个float类型的参数的返回值为void的指针