滑动收取金币和滑动地图移动冲突求解答

先放出我的节点层级关系

首先我在Baseview节点上绑定了 touchstart,touchmove等系统事件,用于制作地图的拖拽移动和缩放,在其子节点中map100里面,会有金币生成,我需要制作滑动收取效果,而这个滑动收取,就和上面的拖拽移动产生了冲突。

那么我原先设想的实现方式是,我给map100节点中的金币节点绑定点击事件,当这个点击事件触发,我就再给map100这个节点绑定touchmove,和touchEnd事件, 然后再touchmove事件中进行阻止冒泡,结果当前这个节点的touchEnd事件也被阻止了,无法触发,我傻了X1。。。

那么我又尝试了cocos creator官方提供的屏蔽事件API,pauseSystemEvents, resumeSystemEvents 根据其解释,这个API在调用时要传入一个boolean参数,这个参数如果为true 他会把当前节点和子节点的所有事件全部屏蔽掉,不让触发
那么传false,就应该是只屏蔽自己的事件把,我是这么想得

暂停当前节点上注册的所有节点系统事件,节点系统事件包含触摸和鼠标事件。 如果传递 recursive 为 true,那么这个 API 将暂停本节点和它的子树上所有节点的节点系统事件

于是我将代码逻辑改为了这样,给map100节点中的金币节点绑定点击事件,当这个点击事件触发,再给map100这个节点绑定touchmove,和touchEnd事件 然后调用 this.Baseview.pauseSystemEvents(false) 结果发现,并没什么软用,地图还是可以拖动,而把参数改为true,地图是拖不动了,但是我给map100节点绑定的touchmove,和touchEnd事件也不生效了,我傻了X2.。。。

这时我用了第三种实现方式,我给最外层的Canvas节点绑定点击事件,判断坐标,当它的坐标符合map100中的金币节点坐标时,我就给Canvas节点帮定touchmove,touchEnd事件,这时我想,那这下this.Baseview.pauseSystemEvents(true) 就肯定影响不到我了把,因为我是父节点阿,它不是只影响当前节点和子节点吗,当我一运行,好了,Canvas节点的touchmove,touchEnd事件不触发…

另外补一句,window中按shift加徽标键加s键可以截图,然后暂存到剪贴版,但当我在这个编辑文字的窗口使用黏贴时,它显示上传,100%,但是一直在转圈圈…

性感码农在线求答

这是目前的核心代码逻辑,现在问题是,当我打开this.dragWrap.pauseSystemEvents(true) 这行代码时,我点击屏幕后,touchMove事件和touchEnd事件绑定上了,但是touchMove事件和touchEnd事件没有触发,当我第二次点击时,touchMove触发,touchEnd触发两次,这个pauseSystemEvents API到底是个什么情况呢,我的理解是当我调用这个API后那么调用这个API的节点以及子节点身上绑定的事件就不会触发,那为什么连父节点也会在绑定那一刻受到影响呢,难道只能通过在代码中加锁,当我滑动收取时把锁打开,用完再关闭,但这样的话我不是要去操作其他脚本了吗

完贴:slightly_smiling::slightly_smiling::slightly_smiling:

你这自我解决的好快:joy:

我又遇到新问题了:triumph:
touchmove事件莫名其妙中断不触发

莫名进去touchcancel,haha