CocosCreator Widget总结

这里的总结,我们主要来说一下widget.updateAlignment()这个方法的坑和解决的办法。

在详细说明之前,有必要交代一下我测试的版本为1.9.3,然后,希望大家看到此文后能帮大家跨坑。

1.updateAlignment的坑

updateAlignment的坑在于:当调用了该方法后,不只本节点的位置会改变;如果父类有widget,则也会调用该方法。且如果父类只是改变了node的x属性,而不是修改widget的属性,则父类会根据widget的属性重置位置

下面看实例:

  

再来看WidgetTest脚本:

cc.Class({
    extends: cc.Component,

    properties: {
        
    },

    start () {
        setTimeout(function () {
            console.log("vvv 1");
            this.node.x = 0;
        }.bind(this), 1000);

        setTimeout(function () {
            console.log("vvv 2");
            this.node.getChildByName("subWidget").getChildByName("subSubWidget").x = 100;
        }.bind(this), 3000);


        setTimeout(function () {
            console.log("vvv 3");
            this.node.getChildByName("subWidget").getChildByName("subSubWidget").
            getComponent(cc.Widget).updateAlignment();
        }.bind(this), 5000);
    },
});

执行完第一个setTimeout后:

执行完第二个setTimeout:

执行完第三个setTimeout:

经过测试,得出结果:

执行某个节点的Widget组件的updateAlignment方法后,其所以父类会递归updateAlignment(),最后导致所有父类的位置重置成原始Widget的位置。

 

2.扩展结论

最后,经过一系列的测试,得出扩展结论:

执行某个节点的widget的updateAlignment后,同级节点不会执行updateAlignment,子节点也不会执行updateAlignment。

 

3.跨坑神操作


cc.Class({
    extends: cc.Component,

    properties: {
        
    },

    start () {
        setTimeout(function () {
            console.log("vvv 1");
            this.node.x = 0;
        }.bind(this), 1000);

        setTimeout(function () {
            console.log("vvv 2");
            this.node.getChildByName("subWidget").getChildByName("subSubWidget").x = 100;
        }.bind(this), 3000);


        setTimeout(function () {
            console.log("vvv 3");
            this.node.getChildByName("subWidget").getChildByName("subSubWidget").
            getComponent(cc.Widget).enabled = true;
        }.bind(this), 5000);
    },
});

这样执行就可以只更新本节点的widget属性了!。。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值