求助帖,关于点击事件穿透

引擎版本是版本是3.7版本,想要点击穿透的功能,
场景简单描述:Canvas下有两个同级结点A,B。A有一个子节点ButtonA挂了一个按钮组件;B有一个子节点MaskB,是一个全屏的sprite,透明度为0,在代码里对这个sprite进行点击事件的注册。

此时点击这个MaskB的时候ButtonA上的事件无法被响应。

简单一点的,a节点放在b节点下面。
麻烦一点的,b节点挂个mask组件,用mask在按钮的位置开个口子

第一种方法对于我来说不太能实现,主要想做的功能就是引导功能,在引导过程中有个全面点击的结点并且点击的时候可以穿透到下面的具体页面上的结点按钮上。

第二种方法对我也不太适用,因为想要点击全屏的任何一个位置都关闭引导,并且需要让事件穿透下去。

官方不是有套免费的新手引导?而且商城里面也有那么多新手引导,还要自己写,多麻烦···
而且新手引导也是用mask开口子

监听节点那4个TOUCH事件,然后在事件回调中让 event.preventSwallow = true 即可

10赞

正解!多谢,3.8.0也是这样处理。 同时谴责官方文档里,虽然有相关的文档,但对要同时设置4个Touch事件这个事情只字未提

2赞

真的是这样 :rofl:

谢谢大佬,帮了大忙了,原来要写4个!!

1赞

感谢大佬,3.8.4也是这么设置 :joy:

很难想像是这样的结局

我用的3.8.2,只用写2个, START和END,就能穿透。

3赞
protected onLoad(): void {

    this.node.on(Node.EventType.TOUCH_START, (event: EventTouch) => {
        event.preventSwallow = true
    }, this);

    this.node.on(Node.EventType.TOUCH_CANCEL, (event: EventTouch) => {
        event.preventSwallow = true
    })

    this.node.on(Node.EventType.TOUCH_END, (event: EventTouch) => {
        event.preventSwallow = true
    }, this);

    this.node.on(Node.EventType.TOUCH_MOVE, (event: EventTouch) => {
        event.preventSwallow = true
    }, this);
}

这样就ok了

2赞

经过验证,3.8.6需要同时设置:TOUCH_START 和 TOUCH_END,否则就无法穿透,因为官方没有特别说明,我当时只设置了其中的一个事件导致点击无法穿透。当时有个需求:点击游戏界面任何位置出现点击粒子效果,卡了很长一段时间,感谢大佬支招。

把a复制到b上