@property set/get 问题

@property(cc.Font)
_font: cc.Font = null;

@property
set font (font: cc.Font) {
    this._font = font;  
}
get font () {
    return this._font;
}

以这样的形式写,并不能被编辑器识别

Font 或者 SpriteFrame 的 get/set 应该怎么样写?

:slightly_smiling:

    private _font : cc.Font = null;
    
    @property({type : cc.Font})
    set font (value: cc.Font) {
        cc.log('font changed');
        this._font = value;
    }
    get font () : cc.Font {
        return this._font;
    } 

我怎么才能在组件被add或者reset的时候触发指定的函数?

font 不会保存是什么情况呢
编辑器重新加载脚本 这个font会是初始空的
还是设计就是set get形式写的不会保存的

需要在属性前加上 @property 修饰才能被持久化到文件里,我这这样做的:

//状态
@property({type: cc.Enum(ChariotStatus)})
_status: ChariotStatus = ChariotStatus.RUN;

//通过属性面板控制
@property({type: cc.Enum(ChariotStatus)})
get status(): ChariotStatus {
    return this._status;
}
set status(value) {
    if (this._status === value) {
        return;
    }
    this._status = value;
    this.playAnimation();
}

以“_”开头的属性,不会显示到引擎属性面板上,也不会被持久到文件里,加上 @property 就可以被保存下来了,希望对你有所帮助。

3赞

搞定了 多谢