cocos ceater 如何实现显示 Tip 的 同时能响应点击其他功能?( 二 )


// 给 node 注册触摸或鼠标事件时,传入第四个参数 true,表示 useCapture 。例如:this.node.on(Node.EventType.TOUCH_START, this.onTouchStartCallback, this, true);
当节点触发 touch-start 事件时,会先将 touch-start 事件派发给所有注册在捕获阶段的父节点监听器,然后派发给节点自身的监听器,最后才到了事件冒泡阶段 。
所以解决我们这次的问题的思路就变为,我们在根节点的地方监听点击事件,然后判断 Tip 是否有打开,如果打开了的话就把它关了,事件依然是会继续传递,如果没有打开,那就也没问题呀 。这里我们就能同时实现,不仅点击任何地方都能隐藏 Tip ,同时点击其他功能按键也能响应功能,同时隐藏 Tip 了 。
但这里还有一个小问题,如显示 Tip 了,还去点击显示 Tip 的礼盒呢?这里就会出现 Tip 隐藏然后显示了,也就是会闪一下,因为我们的捕获阶段 监听到 Tip 打开了,所以把它关了,然后响应点击事件,又打开了,这里我们在点击显示 Tip 的函数上加个标签 ,保存点击显示 Tip 的 Node 节点,然后在捕获阶段判断这次点击的节点是否为同一个节点,是的话就跳过 。这次摆图上我们不需要处理,就是代码上的处理:
下图就是在根节点加上捕获监听:
然后响应显示 Tip 的函数:
【cocos ceater 如何实现显示 Tip 的 同时能响应点击其他功能?】到此我们基本比较完美的解决显示 TIp 的问题啦!我们可以在显示 Tip 的同时响应其他功能,也能保证点击空白的地方也能关闭 Tip !
总结
对于我一个刚入职大半年来说,解决问题是非常有趣的,特别是想到更好的方法,很多时候我们没发一步就是最好的,往往是不断改进,这个过程,不仅是学习,也是经验积累的过程,我们解决一个问题也不应该有一种解决方案的放弃别的探索,因为实现某个东西是很简单的,但往往是有很多很多种方式去实现,那种是更适合的,才是关键,因为就像工具,没有最好的工具,只有最适合的哦~