v2.3.1 button bug反馈(乌龙)

  • Creator 版本:v2.3.1

  • 目标平台: web

使用如下代码监听事件:

	public setSignInEvent(callback: Function): void {
		this.signInButton.node.on(cc.Node.EventType.TOUCH_END, callback, this);
	}

signInButton 增加一个点击事件,当设置 interactable false时,点击事件依然执行

this.signInButton.interactable = false;

这不是bug吧。这按钮组件的事件,和节点的触摸事件完全是两个不同的东西啊

interactable 只会影响button组件上的点击事件,而不是node上的

组件节点的事件,不是会传到组件里面去吗?

我在 button.js 源码里面找到了这个

    _onTouchEnded (event) {
        if (!this.interactable || !this.enabledInHierarchy) return;

        if (this._pressed) {
            cc.Component.EventHandler.emitEvents(this.clickEvents, event);
            this.node.emit('click', this);
        }
        this._pressed = false;
        this._updateState();
        event.stopPropagation();
    },

订阅的 TOUCH_END 事件最终应该会走到这里才对吧。我看见里面判断了 interactable 的值,按理说应该没错才对,是我哪里理解错了?

这里的touchended,并不是自己注册的触摸事件,他是引擎的实现

节点的事件,为什么要跟组件去挂钩呢

一般而言,这里的点击事件应该怎么写了?

我使用下面这种方式,

this.signInButton.node.on("click", callback, this);

设置 interactable 为 false时,按钮就不能点击了。

能帮我解释下 clickcc.Node.EventType.TOUCH_END 的区别吗?

这个官方文档中有介绍的

https://docs.cocos.com/creator/manual/zh/components/button.html

谢谢!
我弄明白了,是我把 clickcc.Node.EventType.TOUCH_END 两个事件混为一谈了。这其实时两个事件 clickcc.Button 的事件,cc.Node.EventType.TOUCH_END 是节点触摸事件,需要甄别使用。

在此感谢!

1赞