关于点击事件穿透的一个记录贴

废话不多说先直接贴上原贴地址

版本2.1.2实测是有效的(2,.2.2也有效,更高版本不清楚)
其中有一些坑:
_touchListener只有在注册了监听事件后才有参数
typescript 里需要在头文件里给node添加_touchListener参数

还有一些比较奇怪的问题想找原来的问题解决人:14: @huilai475

@menu(“i18n:MAIN_MENU.component.ui/Unchoke Input Events”)
这一段代码有什么意义吗,测试过好像没有也是可以让事件穿透的,但是又不敢删,怕出问题:2:

关于 @menu 还是建议仔细阅读下文档,你会学到更多…
另外我觉得没必要加 d.ts ,直接 node['_touchListener'] 访问更方便些,毕竟这个东西随时都有可能被去掉~

2赞

可以删

最好别这么改,因为我们这边的实现还在优化中,2.4 完善了不少,3.0 会大变。

1赞

另外我不认同的是,设置一个更上层的平级节点却又要穿透事件这个操作。
如果你需要穿透,你应该把平级节点改成父节点。

好,关于api的我这边还会继续留意,不过我这边之所以需要做点击事件的穿透,是因为有新的需求是要求在一个已经完成的项目中实现未操作时弹出指定窗口,在原本并没有对所有点击事件进行规划的情况下,不得已才初次下策:5:如果有更好的解决办法也不会使用这种开发团队并不建议的解决办法:11:

有用但是不知道怎么用的知识增加了

node._touchListener.setSwallowTouches(false)
false透过,true不透过
这个用起来很方便

1赞

说到@menu有个问题,节点可不可以在编辑器直接创建自己已经制定好的节点:14:

节点库不就是干这件事的么,把你的 prefab 拖进去存放

1赞

_touchListener 这么好用的方法,到现在还是波浪线:rage:

_touchListener 这个方法是确实好用,策划想要的功能我们永远不知道是什么。不允许我们认不认同 另外2.4.0 这个方法无法使用 CreateForm ERROR ui/UITopTouchLayer ONLY TypeError: Cannot read property ‘setSwallowTouches’ of null。。有点无奈 是我的问题还是得另外操作?

1赞

@jare 这种需求还蛮常见的,我刚好做到一个需求,门框盖住玻璃,需要拖动的是下一层的玻璃
我的做法是需要穿透B点到A,把B的图片放到B的子节点里,将B的空node宽高设置为0