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

来源:互联网 发布:网络赌钱游戏网站 编辑:程序博客网 时间:2024/06/10 14:23

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是我们前面提到的进行类型转换的宏
0 0
原创粉丝点击