进阶话题

注册事件监听

当我们需求多个节点对象有相同的事件响应时,可以创建一个事件监听器,然后通过 eventDispatcher,将其注册到多个对象。

以我们之前提到的触摸事件监听器为例:

  1. // Add listener
  2. _eventDispatcher->addEventListenerWithSceneGraphPriority(listener1,
  3. sprite1);

需要注意的是,在添加到多个对象时,需要使用 clone() 方法。

  1. // Add listener
  2. _eventDispatcher->addEventListenerWithSceneGraphPriority(listener1,
  3. sprite1);
  4. // Add the same listener to multiple objects.
  5. _eventDispatcher->addEventListenerWithSceneGraphPriority(listener1->clone(),
  6. sprite2);
  7. _eventDispatcher->addEventListenerWithSceneGraphPriority(listener1->clone(),
  8. sprite3);

移除事件监听

按照下面的方法,可以将已经添加的事件监听器移除。

  1. _eventDispatcher->removeEventListener(listener);

内置节点对象的事件分发机制,和我们上面讨论的一致,比如,当你点击带有菜单项的菜单时,也会分发一个事件。 同样的你也可以在内置节点对象上使用 removeEventListener() 移除事件监听。