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);
```
如上,

为啥我对一张小图片添加事件,可是点击整个舞台都有响应呢

难道是每次都要在onTouchBegan中判断??
另外还有一个疑惑,从cocostudio中获取出来的widget可以调用addTouchEvent,而上面的sprite1则不能,
但是直接通过上面的方法对widget添加事件和addTouchEvent有和区别??
-
我们的事件分发是不包含判断逻辑的,所以如果你注册了TOUCH_ONE_BY_ONE事件,那么所有touch事件你都可以接收到,需要你自己判断是否应该处理。这主要是为了效率的考量
-
ccui.Widget 对事件处理进行了一次封装,因为ui系统会自主分发事件给控件,控件会自己检测是否应该响应,所以使用方式略微不同,所以widget就用自己的方法,其他对象用常规的事件处理就好
嗯嗯,早上研究源码的时候有发现了,封装过一次了.多谢回答