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; } }