cocos版本:2.4.4
游戏中可能会有多边形按钮,例如下图中的棱形按钮。

因为常规cc.Button只能检测矩形范围。例如点击下图中红点位置。点击的是按钮2,但是会触发按钮1的点击。

给按钮添加多边形碰撞组件PolygonColider,并设置Points,勾选Editing可以看见Points的绿点。

点击按钮时,检查触摸点是否在多边形内。如果在多边形内则算点击成功,在多边形外则算没有点击成功。
代码如下:
const { ccclass, property } = cc._decorator;
@ccclass
export default class MainScene extends cc.Component {
@property(cc.Node)
btn1: cc.Node = null;
@property(cc.Node)
btn2: cc.Node = null;
start() {
this.btn1.on(cc.Node.EventType.TOUCH_END, (e: cc.Event.EventTouch) => {
let bHit = this.checkBtnPolygonCollider(this.btn1, e);
console.log("点击1:", bHit);
}, this, true)
this.btn2.on(cc.Node.EventType.TOUCH_END, (e: cc.Event.EventTouch) => {
let bHit = this.checkBtnPolygonCollider(this.btn2, e);
console.log("点击2:", bHit);
}, this, true)
}
/**
* 检查按钮点击是否在多边形内
* @param btn 按钮
* @param e 点击事件
*/
private checkBtnPolygonCollider(btn: cc.Node, e: cc.Event.EventTouch) {
let collider = btn.getComponent(cc.PolygonCollider);
let points = collider.points;
let local = btn.convertToNodeSpaceAR(e.getLocation());
let bHit = cc.Intersection.pointInPolygon(local, points);
return bHit;
}
}
浙公网安备 33010602011771号