http://blog.csdn.net/decajes/article/details/38233645
cocos2d-x 3.0版本的事件分发的机制较之之前的版本进行了修改,把事件处理的逻辑分离出来,并通过不同的事件监听器来监听不同的事件。当一个节点收到了事件,就会指派一个事件分发器_eventDispatcher专门来分发这些事件。对于触摸来说,大概的过程就是我们先创建一个对应触摸事件的监听器,然后覆盖触摸事件的函数,并把它们绑定到监听器,然后可以设置一下这个监听器的属性,最后把监听器添加到分发器之中,系统就会自动进行触摸事件的处理。
我们先看看单点触摸的使用,下面是源代码中关于单点触摸监听器的类,可以看到
- classEventListenerTouchOneByOne:publicEventListener
- {
- public:
- staticconststd::stringLISTENER_ID;
- staticEventListenerTouchOneByOne*create();
- virtual~EventListenerTouchOneByOne();
- voidsetSwallowTouches(boolneedSwallow);
- boolisSwallowTouches();
- ///Overrides
- virtualEventListenerTouchOneByOne*clone()override;
- virtualboolcheckAvailable()override;
- //
- std::function<bool(Touch*,Event*)>onTouchBegan;
- std::function<void(Touch*,Event*)>onTouchMoved;
- std::function<private:
- EventListenerTouchOneByOne();
- boolinit();
- std::vector<Touch*>_claimedTouches;
- bool_needSwallow;
- friendclassEventDispatcher;
- };</span>
这个类看上去比较容易理解,下面我们用代码来演示一下怎么使用。在HelloWorld的init函数中注册监听器并添加到事件分发器中去。
copy