gpt4 book ai didi

javascript - Cocos2d-js 3.2 中何时取消注册事件监听器和计划回调

转载 作者:行者123 更新时间:2023-11-28 00:40:22 28 4
gpt4 key购买 nike

我正在使用 Cocos2d-js v3.2 使用 extend() 创建 cc.Sprite 的自定义子类。该子类的实例应该是可点击的(可触摸的)并且每帧都需要一些计算。为了代码的可读性,我想注册触摸监听器并在构造函数内部添加调度程序回调。这样,每当创建新的 Sprite 时,它就会自动可供使用。我对这种方法有两个问题:

  1. 在构造函数中注册监听器是执行此类操作的最佳位置吗?在将 Sprite 添加到节点树之前调用构造函数,因此我担心是否可能存在一些我现在不知道的副作用。
  2. 我应该何时何地取消注册触摸监听器/调度程序回调?当 Sprite 从节点树中删除时、当它变得不可见时或当对象被销毁时

代码:

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);
}
});

最佳答案

嗯,何时注册和注销事件取决于具体情况。 eventManager 独立于渲染系统,不用担心副作用。但是您应该知道 eventListener 在注册后就会生效,而不是在将节点添加到节点树时生效,因此在需要时注册监听器.

当调用cc.eventManager.addListener时,如果第二个参数是ccnode,那么当该节点被销毁时,事件监听器将自动注销。如果第二个参数是优先级,则当您不需要事件监听器时,您应该手动删除它。

关于javascript - Cocos2d-js 3.2 中何时取消注册事件监听器和计划回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28014138/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com