cocos2dx 3.0 事件分发机制详解


首先3.0中使用两个vector来存储事件监听器:

std::vector* _fixedListeners;                        存储fixedListener

std::vector* _sceneGraphListeners;          存储SceneGraphListener


然后事件通过cocos2dx的EventDispatcher中的dispatchEvent函数来传递,

传递主要针对上述两个ListenerVector

是对fixedListener 和 sceneGraphListener进行排序(fixedListeners按照fixedPriority从小到大的顺序进行排序,sceneGraphListeners按照priority由大到小排序,这里估计是按照显示层级来排序了)

其次,对排序后的两个listeners 数组进行事件传递,传递的原则是首先把事件传递到fixedLisener中优先级<0的Lisener中,如果事件被处理则break终止传递,如果不被处理则传递到sceneListener中,同理不被处理继续传递到fixedListener中优先级>0的Listener中,直到事件被处理或者被丢弃(没有任何节点处理)。

至此完成了一个事件传递过程。



你可能感兴趣的:(cocos2dx 3.0 事件分发机制详解)