关于触摸的问题

如图所示,将3张sprite加入某个层中,在这个层上添加触摸事件,如果触摸点在牌上,则牌变颜色。 现在触摸点在”3“上,为什么不是”3“这张牌先变颜色,而是小王变颜色?

事件代码为:
onTouchEvent: function () {
this.testLayer.on(cc.Node.EventType.TOUCH_START, this.touchBegan, this);
this.testLayer.on(cc.Node.EventType.TOUCH_END, this.touchEnd, this);
},

你应该在 touchBegan 里面加一个 event.stopPropagation();

 _getCardForTouch: function (touch, cardArr) {
        for (var k in cardArr) {
            var box = cardArr[k].getBoundingBox();
            if (cc.rectContainsPoint(box, touch)) {
                cardArr[k].isChiose = true;
                cardArr[k].color = new cc.Color(150, 150, 150);
                return true;
            }
        }
    },  

  touchBegan: function (event) {
            event.stopPropagation();
            var touches = event.getTouches();
            var touchLoc = touches[0].getLocation();
            this._getCardForTouch(touchLoc, this._handCardList);
        },

还是不起作用

你是否可以发给 demo 给我

Touch.zip (74.1 KB)

稍等我测试一下,等我回复

好的,谢谢了

这里的原因应该是要数组从后往前遍历,因为你是通过坐标来判断,并且你的卡牌有重合,当你点击到 3 的时候,其实 2 的坐标也是符合的,除非你点击不重合的位置。

你也可以在每个卡牌都进行注册事件,这样就不需要去遍历数组

:cry:是我疏忽了,,谢谢