中断button点击事件

button按钮在按下时,弹出一个ui盖住button按钮,此时抬起会触发按钮的事件。如何能让弹出页面的时候取消掉所有按下的按钮点击事件的监听?因为可能游戏里有很多很多按钮,也不知道会弹哪个页面,此时按下的是哪个按钮。有接口吗

点击三个事件touchstart touchmove touchEnd, 通常都是用touchEnd来做点击事件,因为他是抬起才检测

我知道,我只是说用button组件,在按下之后盖住再抬起,不要触发点击事件。不用专门对button这个节点进行touch的监听

只要失去焦点就会触发end结束,我的建议是你得逻辑需要更改

加一个标记页面弹出的开关呢?在按钮的回调中去判断开关?在Button组件上绑定的事件只有按钮切换到最后的状态时才会执行

可以设计弹框UI有个父容器,当有UI弹出时候,容器的children 不为0 此时让按钮弹起失效,就是拿 容器的children 个数去做是否中断的条件

可是按钮太多,需要加代码的地方太多了。而且一个页面弹出加个开关,那该页面弹出后该页面的按钮又该怎么办

那假如是ui里的按钮呢,再有个二级页面弹出,那一级ui按钮的弹出又该怎么办。

怎么改都没办法根本解决问题吧

可以看看能不能使用装饰器解决,目前只想到这些

在捕获阶段就拦截事件

是说在touchend的捕获阶段拦截button的事件吗,这要怎么拦截,监听touchend事件再清除所有事件吗

装饰器是说通过给button的onclick回调函数注入处理吗,那也只能是通用逻辑吧,不太好处理各种情况吧

2楼给了你正解的,你描述的这个需求是不对劲儿的,你处理界面弹出和点击事件关联的逻辑需要重新修改,先看下官方文档关于点击事件的文档
然后,你的描述不是很清楚,论坛里发帖问最好是把你的代码和表现截图贴出来,然后根据图描述下需求,事件监听处理,这是最基本的引擎API,不要怀疑。

用了fgui,fgui里面的按钮监听onclick回调是可以清除的,他好像记录了所有按下的target,然后可以把所有点击在页面显示出来时清除掉

界面的弹出和按钮的点击没有关联,就只是单纯用cocos的button组件,按下不松开,之后从其他的逻辑弹出了ui界面,此时再松开按钮,会触发按钮的回调。而按钮的回调可能是弹出另外一个页面,这就会导致多个页面同时显示

目前看下来你得功能,按下触发UI的窗口弹出?按理说基本上不会在按下触发新窗口UI,按下大部分都是音效等相关处理,抬起才做新的界面逻辑触发,目前你的问题看下来,修改你得功能需求是唯一解

举个例子,按钮a的组件button的onclick事件是打开页面A,在游戏开始时固定延迟2秒打开页面B,在1秒的时候我按下按钮a但不抬起,直到第3秒后再抬起。此时B页面已经打开,又会执行按钮a的回调打开页面A,这个时候就导致两个页面一起出现了

这种需求简单啊,A弹出判断B又没有弹出来,没有就正常,有就return,不要再按钮上做文章

这只是一个特殊的例子,一个单独的页面和一个单独的按钮。游戏里按钮和页面太多了啊