引擎版本3.6
void EventDispatcher::dispatchTouchEvent(EventTouch* event)
{
sortEventListeners(EventListenerTouchOneByOne::LISTENER_ID);
sortEventListeners(EventListenerTouchAllAtOnce::LISTENER_ID);
auto oneByOneListeners = getListeners(EventListenerTouchOneByOne::LISTENER_ID);
auto allAtOnceListeners = getListeners(EventListenerTouchAllAtOnce::LISTENER_ID);
..............
}
这一段代码是我的疑问所在。
来看两种情况
情况1
auto scene = Scene::create();
Director::runWithScene(scene);
auto btn1 = Button::create();
scene:addChild(btn1);
auto btn2 = Button::create()
scene:addChild(btn2)
运行后,在
sortEventListeners(EventListenerTouchAllAtOnce::LISTENER_ID);
后打断点,发现排序后的监听器顺序是btn2的在btn1之前
情况2
auto node = Director::getNotificationNode()
auto scene = Scene::create();
Director::runWithScene(scene);
auto btn1 = Button::create();
node :addChild(btn1);
auto btn2 = Button::create()
node :addChild(btn2)
同样,运行后,在
sortEventListeners(EventListenerTouchAllAtOnce::LISTENER_ID);
后断点,发现排序后的监听器顺序居然是btn1在btn2之前,也就是说和情况1刚好是hi反过来的?
对于这种现象;请问是否是我的测试有问题,如果我的测试有问题,希望指出;
如果没有问题,那么为什么会产生这种情况,在Director::getNotificationNode()上添加的节点,接收事件的顺序和普通场景里添加节点接收顺序不同是有意为之么?这样做的目的是什么。还请引擎组以及各位大腿解惑
