问题
如图两个按钮,同层,且无父子节点关系。
一般而言点击星星,触发星星的事件,点击play,触发play的事件。
现在想要点击星星后,触发星星事件并触发play事件。
方法
在事件中,将
this.node2._touchListener.setSwallowTouches(false);
即可使得该按钮穿透点击。
原理
_dispatchTouchEvent: function (event) {
this._dispatchEventToListeners(oneByOneListeners, this._onTouchEventCallback, oneByOneArgsObj);
_dispatchEventToListeners: function (listeners, onEvent, eventOrArgs) {
if (sceneGraphPriorityListeners && !shouldStopPropagation) { // priority == 0, scene graph priority
for (j = 0; j < sceneGraphPriorityListeners.length; j++) {
selListener = sceneGraphPriorityListeners[j];
if (selListener.isEnabled() && !selListener._isPaused() && selListener._isRegistered() && onEvent(selListener, eventOrArgs)) {
shouldStopPropagation = true;
break;
}
}
}
// onEvent
_onTouchEventCallback: function (listener, argsObj) {
// 也就是说 只要 处理了这里 不让返回 true 就会先去处理下一个 触摸事件
// 从这里 我们就可以看到 我们能够去做的就是将 swallowTouches 设置为 false
if (isClaimed && listener._registered && listener.swallowTouches) {
if (argsObj.needsMutableSet)
argsObj.touches.splice(selTouch, 1);
return true;
}
return false;
源码来自:https://blog.csdn.net/u012919240/article/details/107781395