比如说,我一个大地图上有很多建筑,点击建筑会有弹层。
又或,一个大地图有很多城池,点击城池会有弹层。
如果建筑,或城池我做成buttion有话,那拖动城市或者建筑,地图就不会被拖动。
调试发现,拖动城市或建筑,不会触发父节点的touchmove事件,或者camera的touchmove事件。
这个问题目前解决办法吗?
网上查过,似乎给button节点上加touchmove事件,里面写
stoppropagationimmediate
但亲测无效。
大家就没有遇到拖动按纽不会拖动地图的事情吗?都怎么解决的。
难道要在这个情况下放充button组件,直接在node里 on touchend 吗?
那不是要自己按纽效果????
是的,就是要自己做
Button组件不会向后冒泡触摸事件。想个办法把触摸事件向后发送出去。
const {ccclass, property} = cc._decorator;
@ccclass
export default class EventPass extends cc.Component {
@property([cc.Node])
private targetNodes:cc.Node[] = [];
@property
private touchStart:boolean = false;
@property
private touchMove:boolean = false;
@property
private touchEnd:boolean = false;
onEnable(){
if(this.touchStart)
this.node.on(cc.Node.EventType.TOUCH_START,this.passEvent,this);
if(this.touchMove)
this.node.on(cc.Node.EventType.TOUCH_MOVE,this.passEvent,this);
if(this.touchEnd)
this.node.on(cc.Node.EventType.TOUCH_END,this.passEvent,this);
}
onDisable(){
if(this.touchStart)
this.node.off(cc.Node.EventType.TOUCH_START,this.passEvent,this);
if(this.touchMove)
this.node.off(cc.Node.EventType.TOUCH_MOVE,this.passEvent,this);
if(this.touchEnd)
this.node.off(cc.Node.EventType.TOUCH_END,this.passEvent,this);
}
private passEvent(event: cc.Event) {
for (let i = 0; i < this.targetNodes.length; i++) {
this.targetNodes[i].emit(event.type, event);
}
}
}