不规则按钮求帮助

遇到这种情况,大大们会怎么处理点激事件。。。

还能增么处理?该怎么处理还怎么处理呗

每个按钮都是平行4边形 一个button 都是长方形的 透明部分会被点击到 还有遮挡了在下面的按钮 ,你会怎么处理啊

1赞

:joy:不明觉厉是要做到什么要求,背景节点可以直接添加按钮button设置为不可点击就穿透不了,三个按钮的话就看你要什么有效点击范围?- -如果说斜边分界那里也要做到有点击效果的话,估计是不行的,貌似节点占位只能是矩形

1赞

一般按钮是这样放,三角那里就不管了

1赞

其实严格来说这个也算规则图像,菱形:joy:真要是说边界三角也是可以点击的话,也是可以做到的

大佬,可以给个思路吗?我也想做不规则按钮

1赞

改底层,判断透明通道alpha的值小于多少不响应事件

1赞

同问

比如一个不规则形状的地图,需求是只点击地图区域响应,空白区域不响应

isCollidePointPolygon(px: number, py: number, polygon: number[]): boolean {

    let flag = false;

    for (let i = 0, len = polygon.length, j = len - 2; i < len; j = i, i += 2) {

        let ax = polygon[i];

        let ay = polygon[i + 1];

        let bx = polygon[j];

        let by = polygon[j + 1];

        if (px === ax && py === ay || px === bx && py === by) return true;// 点与多边形顶点重合

        if (ay === by && py === ay && (ax < px && px < bx || bx < px && px < ax)) return true;// 点的射线和多边形的一条边重合,并且点在边上

        if ((ay < py && py <= by) || (by < py && py <= ay)) {// 判断线段两端点是否在射线两侧

            let x = ax + (py - ay) * (bx - ax) / (by - ay);// 求射线和线段的交点x坐标,交点y坐标当然是py

            if (x === px) return true;// 点在多边形的边上

            if (x > px) flag = !flag;// x大于px来保证射线朝右

        }

    }

    return flag;

}

polygon是多边形顶点数组,格式是[x0,y0,x1,y1,x2,y2,x3,y3……]
支持任意形状多边形,只要填对顶点数据就行了