美文网首页
CocosCreator编码贴士:活用_isOnLoadCall

CocosCreator编码贴士:活用_isOnLoadCall

作者: S_eVent | 来源:发表于2018-04-26 14:50 被阅读0次

我这个人有一个习惯,喜欢写getter/setter,这样的好处是在设置了某属性值时会自动更新UI,省了不少事,但是在cocosCreator里面更新UI的操作必须在onLoad事件触发之后,如果不遵循这个原则,那么你访问的节点很有可能是空。
例子代码:

cc.Class({
    extends: cc.Component,

    properties: {
        background: cc.Sprite,
        bgImg: {
            get () {
                return this._bgImg;
            },
            set (value) {
                if(this._bgImg!= value)
                {
                    this._bgImg= value;
                    this.updateView();
                }
            },
            visible: false
        },

    },

    updateView(){
        this.background.spriteFrame = this._bgImg;
    },

});

每当我设置了上述代码中的bgImg = xxx时都会导致updateView方法被调用来更新UI,即改变this.background的纹理。但是有时候在updateView方法被调用时我的onLoad方法还未被执行,这时候this.background就是underfined,这样的话就会导致报错。
好在cc.Component类里面提供了一个私有属性叫做_isOnLoadCalled,下面是官方API文档对其的解释:

_isOnLoadCalled Number 返回一个值用来判断 onLoad 是否被调用过,不等于 0 时调用过,等于 0 时未调用。
那么,借助该属性,我们可以把代码改为

cc.Class({
    extends: cc.Component,

    properties: {
        background: cc.Sprite,
        bgImg: {
            get () {
                return this._bgImg;
            },
            set (value) {
                if(this._bgImg!= value)
                {
                    this._bgImg= value;
                    if(this._isOnLoadCalled)//对onLoad是否已被调用的把关
                    {
                        this.updateView();
                    }
                }
            },
            visible: false
        },

    },

    //因为bgImg的setter中可能没能执行updateView,因此在onLoad中需要执行该方法,哪怕updateView被执行了两遍也没关系
    onLoad(){
        this.updateView();
    }

    updateView(){
        this.background.spriteFrame = this._bgImg;
    },

});

相关文章

  • CocosCreator编码贴士:活用_isOnLoadCall

    我这个人有一个习惯,喜欢写getter/setter,这样的好处是在设置了某属性值时会自动更新UI,省了不少事,但...

  • CocosCreator编码贴士:组件不等于Node

    一开始的时候会搞不清楚这两者的关系,但是在经历多次报错的教育之后终于铭记住了这两者之间的不同。先看下图所示的组件 ...

  • CocosCreator编码贴士:组件生命周期注意事项

    编辑器里面如果把一个组件的active设为false的话,在界面上的表现就是选中组件之后,在其"属性编辑器"组件名...

  • CocosCreator编码贴士:充分使用第三方类库来增加框架功

    cocosCreator(以下简称ccc)是一款功能很强大的框架,但是功能再强的框架也不可能面面俱到,总有一些我们...

  • Python小白最基本的30个干货小技巧

    过去小编分享过 一些给初学者的 Python 编程贴士 旨在优化代码并且减少编码工作,我们的读者仍旧很乐意阅读它。...

  • sublime text 3贴士

    sublime text 3贴士

  • 管理贴士

    留住人才,就要满足员工5大需要 1)物质需要。这是第一要素,不争的事实;2)情感需要。花时间与员工交流,情感注;3...

  • 健康贴士

    【三伏话养生】 小暑过后,将迎来一年中最潮湿、闷热的时段,这也是心脑血管意外的高发时节。因此在日常生活中注意以下几...

  • 露营贴士

    1 自备帐篷,充气床,防潮垫(冬天备睡袋)小毛毯,折叠椅,各自的洗漱用品 。晚上篝火(夜晚有风,可以备一条围巾保暖...

  • 理财贴士

    在第一章的学习中,我们对“理财”有了新的认知,同时也量化出“理财”是由“规划+钱生钱”组成的。 那么接下来建立体系...

网友评论

      本文标题:CocosCreator编码贴士:活用_isOnLoadCall

      本文链接:https://www.haomeiwen.com/subject/graplftx.html