-
Creator 版本: 2.4.7
-
目标平台: Chrome
-
重现方式:创建一个父节点一个子节点,父节点监听按下,抬起事件,子节点添加一个cc.Button或其他阻止冒泡的控件,点击子节点,父节点可以监听到按下事件,这时隐藏子节点,当手松开时,父节点监听不到抬起事件。
如下示例项目压缩包,启动项目后点击cocos图标,等图标消失后松手,查看控制台,只有touchStart,没有touchEnd
assets.zip (43.5 KB) -
首个报错: 无
-
之前哪个版本是正常的:
-
手机型号:
-
手机浏览器:
-
编辑器操作系统:
-
重现概率: 100%
我是一个父节点 一个子节点 但是父节点什么都不干 字节点监听 touchmove touchend 事件
当在子节点中 按下后 touchmove touchend 都能正常响应
但是从父节点按下过后 再滑动到字节点的时候 touchmove touchend 都无法正常响应
触摸吞噬,子节点截断了touch事件,你可以试下监听touchcancel,滑动到子节点上时会触发父节点的cancel
有办法不退出吗 退出我就不能监听touch_end的坐标了
将触摸事件传递一下
我监听了俩按下和抬起,监听到了按下,子节点并没有截断按下事件,但当点击的节点隐藏时我再松手并没有监听到抬起
理论上我抬起时没有任何节点阻挡事件传递,
因为节点已经被隐藏,
现在现象是按下时第一个触碰到的节点如果删除或隐藏了,呢么不管是监听的touchmove,或者touchend都不会有事件传出,直到下一次按下才会恢复
事实上我是有个需求,手触摸到屏幕的话,在触摸点生成一个粒子,粒子随触摸点的移动而移动,并且不影响正常点击事件,我使用其他方案解决了
使用这个使事件可以在这个节点被监听,并且不影响我点击到下面的节点 (this.node as any)._touchListener.setSwallowTouches(false);
不过这个需要打开多点触摸
cc.macro.ENABLE_MULTI_TOUCH = true;
但我又需要单点触摸,为了防止两个按钮被同时点击,算是重新实现了一下button
//重写按钮方法
(function () {
var Super = function () { };
Super.prototype = cc.Button.prototype;
//实例化原型
Super.prototype._onTouchEnded = function (t) {
// 限制在单点触摸,且可点击的情况下
if (this.interactable && this.enabledInHierarchy && t.getTouches().length <= 1) {
if (this._pressed) {
cc.Component.EventHandler.emitEvents(this.clickEvents, t);
this.node.emit("click", this);
}
this._pressed = !1;
this._updateState();
}
};
})();
直接在最开始执行的脚本class的外面粘上就好
1赞
