事件发射如何 capture ?

使用CocosCreator_v1.5.2_2017070701.dmg。

事件的冒泡传递很容易理解,也容易实现。但是反向的capture要怎么使用?比如,我现在有3个节点A、B、C,层级结构如下:
–A
----B
-----C
现在在A上通过dispatchEvent抛出了一个事件(eventA),如何在C上接受到?我看on方法的第4个参数是useCapture,尝试在A上通过on添加对事件(eventA)的监听,并设置useCapture=true,然后在C上也通过on注册事件(eventA)的监听,但是事件传递只停留在A上,并且eventPhase===AT_TARGET。也试过,在A的祖先节点注册事件(eventA)的监听(同样useCapture = true),也一样没效果。

有人知道useCapture这个功能到底要怎么使用么??????盼搭救啊~~~~~~~

另外,这个帖子( http://forum.cocos.com/t/1-5-2-event-eventtouch-touch/49160 )中的问题,有人可以回答不?

没办法,你这叫事件广播,Creator 没有这样的机制。 useCapture 解决的是 C dispatch 的事件,A 能提前捕获的需求。
或许你就应该在 C 上监听 A 的事件,而不是在 C 上监听自身 node。

额,子节点(C)监听不到父节点(A)的事件。


这个帖子中不是说可以从父节点到子节点么?(帖子比较老,16年10月的)
这个“父节点到子节点”的实现是有什么限制么?还是说,现在的Creator版本这一块已经大不一样了?

这个是指事件的派发,capture 阶段从父节点派发到子节点。但前提是 event target 必须是子节点,也就是说事件是子节点触发的。

哦,懂了。useCapture可以把事件的派发形成一个闭环:
1.子节点dispatchEvent事件 eventA
2.父节点on()注册监听事件eventA,并设置useCapture=true
3.发起事件的子节点也要注册监听事件eventA

然后就可以发现事件的流转路径:子节点发起----->父节点处理----->回到子节点再次处理

看来,我上面的那个需求得想别的方法实现了~~~

PS:上面提的文档不一致的问题,你们应该记录了吧???

哪里文档不一致?

EventTouch的API文档( http://www.cocos.com/docs/creator/api/classes/Event.EventTouch.html )和 节点系统事件文档( http://www.cocos.com/docs/creator/scripting/internal-events.html )关于


这个的描述,两者不一致,API中没有对应描述。不过代码还是可以用,只是没有代码提示,就像这样:

    onItemTouchMove(evt) {//这里evt如果标明了类型cc.Event.EventTouch,下面一行evt.touch在vs code中就会有警告
    
    var touchPosInNode = this.node.parent.convertTouchToNodeSpaceAR(evt.touch);

    this.node.setPosition(touchPosInNode);

}

谢谢反馈,1.6 已经添加了缺失的 API 文档