添加单击事件的疑问??? 以及和widget的区别

var size = cc.director.getWinSize();
       var sprite1 = cc.Sprite.create("res/btn1.jpg");
        sprite1.x = size.width/2 - 80;
        sprite1.y = size.height/2 + 80;
        this.addChild(sprite1, 10);


        var listener1 = cc.EventListener.create({
            event: cc.EventListener.TOUCH_ONE_BY_ONE,
            swallowTouches: true,                       // 设置是否吞没事件,在 onTouchBegan 方法返回 true 时吞没
            onTouchBegan: function (touch, event) {
                return true;
            },
            onTouchMoved: function (touch, event) {
            },
            onTouchEnded: function (touch, event) {         // 点击事件结束处理
                var target = event.getCurrentTarget();
                cc.log("sprite onTouchesEnded.. ");
            }
        });
        cc.eventManager.addListener(listener1, sprite1);
```



如上, 
![](file:///D:/Program)
为啥我对一张小图片添加事件,可是点击整个舞台都有响应呢
![](file:///D:/Program)

难道是每次都要在onTouchBegan中判断??


另外还有一个疑惑,从cocostudio中获取出来的widget可以调用addTouchEvent,而上面的sprite1则不能,


但是直接通过上面的方法对widget添加事件和addTouchEvent有和区别??
  1. 我们的事件分发是不包含判断逻辑的,所以如果你注册了TOUCH_ONE_BY_ONE事件,那么所有touch事件你都可以接收到,需要你自己判断是否应该处理。这主要是为了效率的考量

  2. ccui.Widget 对事件处理进行了一次封装,因为ui系统会自主分发事件给控件,控件会自己检测是否应该响应,所以使用方式略微不同,所以widget就用自己的方法,其他对象用常规的事件处理就好

嗯嗯,早上研究源码的时候有发现了,封装过一次了.多谢回答