事件分发机制

EventDispatch事件分发是响应用户事件的机制,基本组成:

  1. 事件监听器封装了我们事件的处理代码
  2. 事件分发器通知用户事件的监听器
  3. 事件对象包含事件的信息

有五种事件监听器:

  1. EventListenerTouch:响应touch触摸事件
  2. EventListenerKeyboard:响应键盘事件
  3. EventListenerAcceleration:响应加速度计事件
  4. EventListenMouse:响应鼠标事件
  5. EventListenerCustom:响应自定义事件

当你有一个监听器并且你想要一个对象接受它被给予的事件时,你必须吞下它。 这样它就不会被传递给优先级从高到低的其他对象。这很容易做到:

// When "swallow touches" is true, then returning 'true' from the
// onTouchBegan method will "swallow" the touch event, preventing
// other listeners from using it.
listener1->setSwallowTouches(true);

// you should also return true in onTouchBegan()

listener1->onTouchBegan = [](Touch* touch, Event* event){
// your code

return true;
};

事件优先级

EventDispatcher事件分发器使用优先级决定哪个监听器首先得到一个事件。

  • Fixed Priority(固定优先级)是一个整型值。值较低的事件监听器要比值较高的事件监听器先处理事件。
  • Scene Graph Priority(场景优先级)是一个指向​​Node​​(节点)的指针。其节点具有较高z阶值(即绘制在顶部)的事件侦听器在其节点具有较低z阶值(即绘制在下面)的事件侦听器之前接收事件。这确保了触摸事件,如我们所预期的那样,从前往后传递。
  • Cocos2d-x之事件分发机制_优先级

  • 当使用场景图优先级时,实际上是在树的上方向后移动。如果一个事件被触发,H会看一眼,要么吞下它,要么让它传递给I。同样的事情,我要么消耗它要么让它传递给G,以此类推,直到事件被它吞没或者没有得到回应。