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

cocos2d-x学习之菜单与事件,消息触发机制

2014-06-28 14:01 519 查看




cocos2d-x学习之菜单与事件,消息触发机制

 (2012-02-28 13:18:15)


转载▼


标签: 


cocos2d-x

 


事件

 


菜单

 


selector

 


杂谈

分类: 学习
       cocos2d-x里的菜单,事件触发是通过回调函数实现的。
 
1)实现原理   
具体实现是:
    SelectorProtocol类声明了所有菜单,事件触发的函数原型(虚函数):
  virtual void update(ccTime dt) {CC_UNUSED_PARAM(dt);};

  virtual void tick(ccTime dt){CC_UNUSED_PARAM(dt);};

  virtual void callfunc(){};

  virtual void callfunc(CCNode* pSender){CC_UNUSED_PARAM(pSender);};

  virtual void callfunc(CCNode* pSender, void* pData){CC_UNUSED_PARAM(pSender);。。};

  virtual void menuHandler(CCObject* pSender){CC_UNUSED_PARAM(pSender);};

  virtual void eventHandler(CCEvent* pEvent) {CC_UNUSED_PARAM(pEvent);};

 
 然后定义与所有这些函数原型相匹配的函数指针,比如:
typedef void (SelectorProtocol::*SEL_SCHEDULE)(ccTime);

 
 同时定义进行这种类型转换的宏:
#define schedule_selector(_SELECTOR) (SEL_SCHEDULE)(&_SELECTOR)

 
然后在具体的类里,就可以使用这种回调进行一些事件通知了:
  void CCNode::schedule(SEL_SCHEDULE selector, ccTime interval);
比如上面这个,CNode就可以在有具体事件是,调用selector进行回调通知了。

2)使用方法
   (以上面的CCNode::schedule为例子)
   a.首先要在类里声明与上面列出的某一个触发函数原型一样的函数(返回值,参数要一样,名称可以不一样),然后做具体触发的实现处理;
void Box2DView::tick(ccTime dt)

{

 m_test->Step(&settings);

}

 
   b.把该函数当成一个变量一样设置到Node的schedule:
schedule( schedule_selector(Box2DView::tick) );
因为大部分数据类都是从CNode里继承过来的,所以可以直接使用schedule()。而schedule_selector是我们前面提到的进行类型转换的宏
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: