我正在使用 Cocos2d-js v3.2 创建cc.Spriteusing的自定义子类extend()。该子类的实例是可点击的(可触摸的)并且每帧都需要一些计算。为了代码可读性,我想注册触摸侦听器并在构造函数中添加调度程序回调。这样,无论何时创建新的精灵,它都会自动准备好使用。关于这种方法,我有两个问题:
- 在构造函数中注册监听器是做这些事情的最佳场所吗?在将精灵添加到节点树之前调用构造函数,所以我担心是否可能存在一些我现在不知道的副作用。
- 我应该何时何地取消注册触摸侦听器/调度程序回调?当精灵从节点树中移除时,当它变得不可见或当对象被销毁时
代码:
var MySprite = cc.Sprite.extend({
ctor: function () {
this._super();
this.initUserInput();
this.initUpdates();
},
update: function (dt) {
// Do some per-frame calculactions
},
initUpdates: function(){
cc.director.getScheduler().scheduleUpdateForTarget(this, 1, !this._isRunning);
},
initUserInput: function(){
var $this = this;
var listener = cc.EventListener.create({
event: cc.EventListener.TOUCH_ONE_BY_ONE,
onTouchBegan: function (touch, event) {
var p = touch.getLocation();
var rect = $this.getBoundingBox();
if(!cc.rectContainsPoint(rect, p))
{
return false;
}
},
onTouchEnded: function (touch) {
},
onTouchMoved: function (touch) {
}
});
cc.eventManager.addListener(listener, this);
}
});