今天才认真弄懂了cocos2dx中的事件回调机制,记录一下
下面例子以UIButton为参考
首先在UIweight中找到一下两句
typedef void (CCObject::*SEL_TouchEvent)(CCObject*,TouchEventType);
(这句话定义了一个函数指针,需要两个参数,分别为CObject* 和TouchEventType)
#define toucheventselector(_SELECTOR) (SEL_TouchEvent)(&_SELECTOR)
(这句话的作用等同于将 toucheventselector(_SELECTOR) (SEL_TouchEvent)(&_SELECTOR)
这一串转换为( (SEL_TouchEvent)_SELECTOR))将_SELECTOR强转为SEL_TouchEvent类型
然后看到addTouchEventListener(CCObject* , toucheventselector)的实现,可以发现
void Widget::addTouchEventListener(CCObject *target, SEL_TouchEvent selector)
{
_touchEventListener = target;(这个为调用被传入进来的函数的实例对象)
_touchEventSelector = selector;(这个为被传进来的函数指针)
}
最后,假设我们在OnTouchEvent()中需要调用我们的回调方法
( _touchEventListener->*_touchEventSelector )(param1,param2);