请教触摸事件传递的问题

版本RC2
用studio做的ui,scene用代码写的,实现效果是:背景layer上有一个按钮,可以点击,再在上面放一个遮罩layer
想实现的功能是:如果添加了遮罩layer,让背景上的按钮不能被点击。
但是现在按下面的代码,即使添加了遮罩layer,后面的按钮也能被点到。
初学没什么头绪,大家帮帮忙~
代码如下:

var layerBg = cc.Layer.extend({
    ctor: function () {
        this._super();
        var root = ccs.uiReader.widgetFromJsonFile("studio_export_bg.json");
        this.addChild(root);

        var btn = root.getChildByName("btn");
        btn.addTouchEventListener(this.foo , this);
        return true;
    },
    foo:function(){
        cc.log("Bg say hi~");
    }
});

var layerMask = cc.Layer.extend({
    ctor: function () {
        this._super();
        //这里写了一个全屏的遮罩
        return true;
    }
});

var scene = cc.Scene.extend({
    onEnter:function () {
        this._super();
        var bg = new layerBg();
        this.addChild(bg,0);
        var mask = new layerMask();
        this.addChild(mask,1);
    }
});



```

遮罩层这样改一下。

var layerMask = cc.Layer.extend({
ctor: function () {
this._super();

    cc.eventManager.addListener({
        event: cc.EventListener.TOUCH_ONE_BY_ONE,
        swallowTouches: true,
        onTouchBegan: function (touch, event) {
            return true;
        }
    }, this);
}

});

可以了,多谢~ :867:

呵呵,不客气。我上面写的方法,原理就是让遮罩层监听触摸事件,并且设置捕获触摸后不再向下传递(swallowTouches = true)。这只是其中一种思路,其实还能有其他不同的方法。这个引擎蛮灵活的,大力推荐!