Node 在 active=false 的情况下还能添加监听事件,是有意为之,还是无意之举?

node在active=false的情况下还能添加监听事件并且可以触发,是故意这样的还是其他什么原因,如果是故意这样的,是出于什么考虑呢?

动态添加监听是啥意思啊?而且我没有觉得哪里不妥啊,我就问问是故意这样的还是其他什么原因,如果是故意这样的,是出于什么考虑

添加是可以添加,但是应该不能触发

可是我这边测试在node.active = false的情况下,添加监听后会触发哦,不信男神你可以自己试试看

我的项目中这种情况不会触发

你可以看看我这,在backGround的active=false的情况下,我给他添加了touchstart监听,然后触发了

我这是在node的active = false的情况下添加监听哦,不是添加监听后再让node的active = fasle 哦

这应该是 bug,我们会再确认下

现有的实现中,emit 确实是会在 active = false 后仍然生效的,emit 是一个用户可以主动调用的 API,我认为这是一个合理设计。因为 active 在我理解中是:“引擎是否还主动调用这个节点,哪怕引擎不调用了,但它的逻辑还是正常的,可以被用户主动触发。”。
但是如果事件是通过派发(dispatchEvent)来调用的,就变成只有 active 的节点才会触发。因为派发事件是一个引擎内部行为,引擎不触发 active = false 的节点事件也更符合 UI 事件使用场景。

不知道这样回答你是否满意?

cc @panda

@atmy 是否只有 native 端有这个问题?Web 表现正常吗?

关于 emit,的确如 @jare 所说,是简单分发,不会去考虑节点是否生效,甚至不会管注册的对象是否是一个节点,它可以是任意对象,emit 的优势就是简单高效,复杂的依赖节点的事件分发需要用 dispatchEvent

1赞

谢谢大神的解答,我明白了:wink:

经过测试只有native端有这个问题,web端没有问题,谢谢大神:grin:

所以我现在在响应函数中加了
if(this.node.active==false)
return;

目前只能用这种方法来解决?

暂时也只有这种办法了,希望官方大神早日修复这个问题(虽然我根本不会遇到:joy:

关注这个 bug 是否解决。