事件与深度的关系似乎有BUG存在。
测试如下: 两个Sprite A B (没有材质) 里面各放一个子节点(Sprite C1 Sprite C2)
点击C1 C2 可以使 A B 改变改变深度。都可以放到最下层。
但是问题来了: 当初始时,A 覆盖在B, 当点击A , A放到B下面以后。 再次点击 A B叠加处,最新获取到事件的 是A的子节点 C1。 理论上来说应该是B 中的C2才对。。。。
这个应该是BUG吧? 这样就会导致 点击后 下面的C1 吃掉了事件, 上面的C2 拿不到事件。(业务逻辑只能让一个节点发生变化。)
最后结果:
查看C++ 和JS 源码可以得到,COCOS2D-JS 的深度改变 确实有坑存在。
NODE 的两个方法 都可以改变深度,但是效果是不一样的.
setLocalZOrder 能够将NODE更新事件侦听的权重。
reorderChild 只是单纯改变深度,不会更新事件权重。
另外,JS的zIndex 与setLocalZOrder等效
cc.defineGetterSetter(_p, “zIndex”, _p.getLocalZOrder, _p.setLocalZOrder);
真是不看源代码是不知道这些细节的。浪费几个小时。。