关于setSwallowTouches(true)

layer a 在layer b上层,b上有个按钮,a注册了多点触摸监听实现双指缩放,给a注册了单点触摸监听设置setSwallowTouches(true)后,多点触摸失效了


local function onTouchBegan(touch, event)
    print("OneByOne")
    return true
end
local function onTouchesBegan(touch, event)
    print("AllAtOnce")
    return true
end
local listener1 = cc.EventListenerTouchOneByOne:create()
listener1:setSwallowTouches(true)
listener1:registerScriptHandler(onTouchBegan,cc.Handler.EVENT_TOUCH_BEGAN )

local listener2 = cc.EventListenerTouchAllAtOnce:create()
listener2:registerScriptHandler(onTouchesBegan,cc.Handler.EVENT_TOUCHES_BEGAN )

local eventDispatcher = self:getEventDispatcher()
eventDispatcher:addEventListenerWithSceneGraphPriority(listener1, self)
eventDispatcher:addEventListenerWithSceneGraphPriority(listener2, self)

在ab重叠的地方点击
设置setSwallowTouches(true)之前:

设置setSwallowTouches(true)之后:

事件不再穿透传递了。

具体逻辑是:
A、B遮盖
同时在AB画面压下两点
那么不设置过滤标志的话
A会获取到touch事件1和touch事件2,这两个事件都带了一个point
B会获取到touch事件,这个event带了两个point
设置完过滤后,
A获取到第一个touch事件后,整个事件投递结束,因而不会有事件2,以及事件3的发生了。

listener1来了两个点