cocos2d-x事件触发的优先级

来源:互联网 发布:单片机设计作品 编辑:程序博客网 时间:2024/05/19 08:26
转自:http://firedragonpzy.iteye.com/blog/1622569
      刚刚开始学习coocs2d-x的时候,被这个事件的优先级整的可是够呛啊。关于事件,有CCStandradTouch,CCTargetedTouch。CCTouchDispatcher类分发S获取的触摸事件。它有两种分发方式,一种是CCStandardTouchDelegate,一种是CCTargetedTouchDelegate。和前面的事件一一对应,前者将所有的Touch信息直接传递给实现该协议的对象,而后者则要求实现该代理的类一次只能处理一个事件,并且吃掉该事件,不再传播,当然也可以设置传播。

      关于CCStandardTouchDelegate,它可以处理多触点事件,而CCTargetedTouchDelegate也就是相应的单点事件喽。

      使用单点事件,基本都会用到下面的代码:
void DialogLayer::onEnter(){CCLayerColor::onEnter();CCTouchDispatcher::sharedDispatcher()->addTargetedDelegate(this,0,true);}void DialogLayer::onExit(){CCLayerColor::onExit();CCTouchDispatcher::sharedDispatcher()->removeDelegate(this);}
      最主要的就是CCTouchDispatcher::sharedDispatcher()->addTargetedDelegate(this,0,true);中的第三个参数,若为true,则表明吞掉事件,若为false,不吞掉事件,个人感觉和目标事件是一样的,只不过是单点,而不是多点而已。写完这个,相应的肯定会使用到下面的代码:
bool DialogLayer::ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent){return true;}void DialogLayer::ccTouchCancelled(CCTouch *pTouch, CCEvent *pEvent){}void DialogLayer::ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent){}
ccTouchBegan中的return true,表明拥有对象处理权,这个返回值是和CCTouchDispatcher::sharedDispatcher()->addTargetedDelegate(this,0,true);的第三个参数息息相关的若为true,ccTouchBegan也为true,会吞掉事件,走接下来的move等。若ccTouchBegan为false,则不会吞掉事件,各个层被分发点击事件,但是不走move等方法。
不对啊 ,扯远了,本来是说优先级的。先说优先级:

拿精灵来举例子吧。精灵触摸事件的触发是根据添加的顺序依次触发的,后添加的精灵先捕获触摸事件,当然,这是没有设置事件优先级的情况下,若要是定义了事件的优先级,则先按照事件的优先级依次被触发,然后根据添加的顺序依次被触发,特别注意在使用CCMenu的时候,容易出现错误,之前我就是怎么点击也不触发事件,纠结了好久,希望看了本文的朋友们,不会出现此低级错了
乱啊 ,工作了一天在写,脑子有点钝了,见谅,呼呼……

原创粉丝点击