-
Creator 版本:2.3.3
-
目标平台: Web
-
详细报错信息,包含调用堆栈:
-
重现方式:先点击一个节点(不要松手),在这个节点的TOUCH_START回调中设置一个定时器,2秒后隐藏该节点,然后等节点被隐藏后再松手,此时TOUCH_END和TOUCH_CANCEL都不会被调用。
-
之前哪个版本是正常的 :
-
手机型号 :
-
手机浏览器 :
-
编辑器操作系统 :
-
编辑器之前是否有其它报错 :
-
出现概率:
-
额外线索:
Creator 版本:2.3.3
目标平台: Web
详细报错信息,包含调用堆栈:
重现方式:先点击一个节点(不要松手),在这个节点的TOUCH_START回调中设置一个定时器,2秒后隐藏该节点,然后等节点被隐藏后再松手,此时TOUCH_END和TOUCH_CANCEL都不会被调用。
之前哪个版本是正常的 :
手机型号 :
手机浏览器 :
编辑器操作系统 :
编辑器之前是否有其它报错 :
出现概率:
额外线索:
目前节点事件的处理机制是这样的,在节点隐藏的时候,该节点所注册的 EventListener 会被暂停,后续的事件触发就不再处理了。你是什么样的使用场景,在节点隐藏之后还要再触发 TOUCH_END 和 TOUCH_CANCEL?
这里引擎犯了一个错误,也是我今天才提出来的。由于 Cocos2d-x 的历史原因,touchcancel 被实现为手指从按钮移出去后松开时触发,这是错误的。Creator 也继承了这个错误。导致正儿八经的节点被隐藏(或者被系统遮挡)时无法使用 touchcancel 事件。但是如果做出调整的话会面临很大的兼容性问题。之后我们再讨论讨论如何解决这个问题吧。
你这里可以先监听 onDisable 来模拟节点被隐藏时的事件吗?
是不是可以添加一个新的事件,响应节点隐藏,手指离开节点后触发,而旧的事件保留,作为兼容
使用场景:我在根节点上需要监听触摸事件,然后根节点下的子节点也需要监听触摸事件。但是子节点是可能会被回收到对象池中的。如果我触摸持续的过程中子节点的被回收,就会导致根节点收不到触摸结束的回调,这时候就会有问题。
onDisable是不可以的,因为要触发的时机就是触摸事件的结束,而不是子节点隐藏就触发。
现在的处理方法:
触摸事件由根节点监听,然后由根节点分发(根节点不会被隐藏),子节点如果需要监听触摸事件,就监听根节点分发的事件。但是这样需要子节点再自己判断一下点击位置是否在自己身上。
请问现在有方法可以解决吗?