Cocos2d HTML5 Sprite 绑定点击事件

Cocos2d HTML5, 发现 Sprite 类没有点击事件,需要注册点击的代理, 才能接受点击事件。下面一段代码写了一个可以接受点击事件的 DemoSprite 类。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
var DemoSprite = cc.Sprite.extend({

_touchBegan: false,
_touchEnabled: true,

ctor: function (image) {
this._super();
this.init(image);
},

onEnter: function () {
cc.Director.getInstance().getTouchDispatcher()._addTargetedDelegate(this, 0); // 当Sprite加载完后, 注册点击事件(有好几种注册的方式,在这里就不一一介绍了)。
this._touchEnabled = true;
this._super();
},

onExit: function () {
cc.Director.getInstance().getTouchDispatcher()._removeDelegate(this);
//当Sprite退出后,取消点击事件的注册。
this._touchEnabled = false;
this._super();
},
touchRect: function () {
return this.getBoundingBoxToWorld();
},
onTouchBegan: function (touch, event) {
if (cc.rectContainsPoint(this.touchRect(), touch.getLocation())) {
//当点击在 Sprite 范围内时,执行。
//在这里处理点击事件。
this._touchBegan = true;
return true; //返回true, 才会执行 onTouchEnded方法。
}
return false;
},

onTouchEnded: function (touch, event) {
if (this._touchBegan) {
this._touchBegan = false;
}
}
});