CocosCreator Toggle的不可点击没有变成Disabled下的spriteframe

我的Creator版本是v2.2.2
Toggle是继承Button组件的,所以问题从Button里面找,一顿操作过后发现是Button里的_sprite属性为null,而_sprite是在下面这个函数设置的

    _applyTarget () {
        let target = this._getTarget();
        this._sprite = this._getTargetSprite(target);
        if (!this._originalScale) {
            this._originalScale = cc.Vec2.ZERO;
        }
        this._originalScale.x = target.scaleX;
        this._originalScale.y = target.scaleY;

        this._registerTargetEvent(target);
    },

那这个函数会在哪里执行呢?

        /**
         * !#en
         * Transition target.
         * When Button state changed:
         *  If Transition type is Button.Transition.NONE, Button will do nothing
         *  If Transition type is Button.Transition.COLOR, Button will change target's color
         *  If Transition type is Button.Transition.SPRITE, Button will change target Sprite's sprite
         * !#zh
         * 需要过渡的目标。
         * 当前按钮状态改变规则:
         * -如果 Transition type 选择 Button.Transition.NONE,按钮不做任何过渡。
         * -如果 Transition type 选择 Button.Transition.COLOR,按钮会对目标颜色进行颜色之间的过渡。
         * -如果 Transition type 选择 Button.Transition.Sprite,按钮会对目标 Sprite 进行 Sprite 之间的过渡。
         * @property {Node} target
         */
        target: {
            default: null,
            type: cc.Node,
            tooltip: CC_DEV && "i18n:COMPONENT.button.target",
            notify (oldValue) {
                this._applyTarget();
                if (oldValue && this.target !== oldValue) {
                    this._unregisterTargetEvent(oldValue);
                }
            }
        },
    __preload () {
        this._applyTarget();
        this._resetState();
    },

那按理来说,这个函数是肯定会被执行的,又一顿操作发现,我设置interactable的时候居然在_applyTarget之前就执行了更新spriteframe的函数。

所以要怎么解决呢?其实很简单也很sb,看下面

	//tabItem是包含cc.Toggle组件的一个节点
	let node = cc.instantiate(tabItem);
	node.parent = toggleContainer.node; // 先将node添加到某个节点上,就会先执行__preload
    node.getComponent(cc.Toggle).interactable = data.enabled;

如果是下面的写法,就会出现spriteframe没有更新的问题

	//tabItem是包含cc.Toggle组件的一个节点
	let node = cc.instantiate(tabItem);
    node.getComponent(cc.Toggle).interactable = data.enabled; // 先更新了spriteframe,但是_sprite为空,所以更新了个寂寞
	node.parent = toggleContainer.node;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值