已决解!因为触摸离开子节点 父节点TOUCH_END就失效了! 希望官方修复!
什么意思?能描述的更详细一点吗?
两个sprite叠加在一起,父节点有TOUCH_START和TOUCH_END事件 ,如果子节点有TOUCH 事件,父节点就触摸不到了,现在要让父节点和子节点都能够触发TOUCH事件的到,要怎么办啊!
你子节点的事件回调里没有调用event.stopPropagation()吧?如果没有的话,建议你做个demo来看看
都没有event.stopPropagation,
多层嵌套,最上层节点跟中层节点有事件,里面有描点变化,这两个事件无法同时触发,
父节点:
this.node.on(cc.Node.EventType.TOUCH_START,this.touchStart,this);
this.node.on(cc.Node.EventType.TOUCH_END,this.touchEnd,this);
touchStart:function(event){
this.startVecPos =event.touch.getLocation();
},
touchEnd:function(event){
var eP = event.touch.getLocation().x;
var sP = this.startVecPos.x;
if(Math.abs(eP - sP) >= this.moveDis){
if(eP > sP){
this.scrollToPage(this.pageIndex-1);
}else{
this.scrollToPage(this.pageIndex+1);
}
}
},
scrollToPage:function(index){
console.log(this.startVecPos);
if(index>this.size-1||index<0) return;
this.doAction((this.pageIndex<index)?1:0,Math.abs(this.pageIndex-index));
this.pageIndex=index;
},
doAction:function(dir,distance){
var p1 = 0;
if(dir == 1){
p1 = -(this.node.width-this.page_layout.spacingX)*distance;
}else{
p1 = (this.node.width+this.page_layout.spacingX)*distance;
}
this.content.runAction(cc.sequence(cc.moveBy(0.3,p1, 0),
cc.callFunc(function(target,event) {
}, this,{type:"end",index:this.pageIndex})));
},
子节点:
bet.on("touchstart", this.onClick,this);
onClick:function(event){
var item=event.target;
var id=item.getName().split("_")[1];
if(this.clickAreaHandles.length>0){
cc.Component.EventHandler.emitEvents(this.clickAreaHandles,id);
}
},
这里面节点都能获取的到,没有报错!测试结果是父节点的end事件无法触发!
单独两个节点互相嵌套,测试是可以的,还有子节点是prefabs 代码添加上去的!
bet 是啥?另外,子节点上也没有注册 touchend 事件是吗?节点树 hierarchy 可以发来看看
不好意思上面代码是没错的,测试结果主要是两个子节点并排,当触摸从一个子节点移动到另一个子节点,然后松开,父节点的TOUCH_END就会失效!
假设节点关系是:
- P
- A
- B
当在子节点 A 上触发了 touchstart 之后,将触点从节点 A 上移出到节点 B 上,此时其实已经触发了节点 A 的 touchcancel 事件。触点再放开其实也不会再触发 touchend 事件了,所以父节点同样也就接收不到。
这里需要注意的是冒泡机制原理,在冒泡过程中,目标节点(节点 A)和父节点(节点 P)的关系并不是平等的,本质上是 A 节点接收到事件,然后向上冒泡给节点 P,所以事件的类型和触发都是根据 A 节点来进行判断,当触摸事件在 A 节点上被 cancel,P 节点也只能接收到 cancel 事件,而不是 touchend,即便这个触点并没有离开 P
今天测试了下,当触摸事件在 A 节点上被 cancel,P 节点也接收不到 cancel 事件
改用creator这么长时候还是觉得2dx 3.x版本的触摸事件好用,现在的冒泡机制在处理并列节点事件传递很是不爽。
@panda大大,我的demo跟你描述的一样。但是今天测试了下,当触摸事件在 A 节点上被 cancel,P 节点也接收不到 cancel 事件