如何让屏蔽触摸立即生效?

已尝试现有方案:
1.设置屏蔽层的active;不能立即生效,下一帧生效

2.设置屏蔽层屏蔽组件的enabled;不能立即生效,下一帧生效

3.手动给屏蔽层注册事件用于屏蔽;下一帧生效

4.使用cc.eventManager.pauseTarget(this.node);也没有立即生效

通过大家的帮助,这个问题已经得到解决,总结:
1.设置active、position、enabled,node.on、等方式都会在下一帧生效
2.重新cc.Node.prototype.dispatchEvent函数可以实现立即生效,但是无法解决问题
因为:按钮是抬起时触发,两个按钮同时按下,依次抬起时添加的屏蔽层依然没有起到作用
3.最终通过为view添加“仅允许单点触摸”解决了问题

位移呢??

666,好办法,我试试

不行的,设置位置,也是下一帧才会将它绘制到新位置,无法立即生效

那就是你方法的问题

那加一个变量啊

专门做个屏蔽的层,做事件分发,如果需要屏蔽直接return,不知道这样行不行

什么时机下执行的这些代码?

正常来讲,正常调用的话,是不会出现触摸穿透的情况的。

先看一波源码再分析

我猜测楼主执行的代码的时机在某个按钮A按下的时候,如果 在场景深度遍历情况下, 按钮A 在 拦截层 的“下游”,由于本轮点击事件的回调 不会再回到 处于上游的拦截层了,因此就算拦截层注册了event的吞噬还是取消吞噬,都不会影响本轮点击事件了。
如果按钮A在拦截层的 “上游”(场景深度遍历),那么就可以当前帧生效了。

所以。代码的执行时机的分析至关重要。

如果楼主的情况被我说中了的话,问题就找到了。

怎么查看源码- -


谢了…

看源码可以解释或解决95%的疑惑,最优质的“零手资料”,比api这样的一手资料还要好。文档再好,也会有说不清楚的地方,但是源码就是实打实的,源码不会撒谎。

:6::6::6:看的懂 但不好找- -

vscode打开engine目录, ctrl+p搜索脚本,ctrl+shift+f 全局搜索。

这个可能有用,但是没思路

我觉得,不影响效果的情况下,延迟一帧也不是不可

不太清楚你的意思,我的测试方法如下:

1.“测试点击”用来测试是否立即被屏蔽的按钮
2.“mask”屏蔽层
3.另两个按钮时开启关闭屏蔽的按钮

测试:
1.在移动设备上,两个手指快速一次点击“屏蔽”和“测试”
2.如果没有立即屏蔽,“测试”按钮就会被点击,label会显示两个按钮点击的时间差