@property({
type:cc.Enum({})
})
比如这样的一个属性, 怎么用代码动态修改具体的枚举值
好像js有 cc.Class.Attr.setClassAttr(ShaderHelper, ‘program’, ‘enumList’, array); 这种方式
就是不知道ts 该怎么写
cc.Class.Attr.setClassAttr(ShaderHelper, ‘program’, ‘enumList’, array); 支持ts啊
好的,我试试
哎,不对,我要的是可以动态修改的列表选择器, 但是这个好像并不能随时修改的样子, 而且好像是和类绑定的,不是单独的实例
可以的,这个array你自己赋值变化啊
不知道怎么回事, 第一次可以修改后面就没效果了, 打印起来是执行到那里了的
抱歉,挖坟下。我也遇到这个问题,你这个动态修改属性,和类绑定的问题有处理方法了吗?
问题解决了吗,我也被这个问题卡住了
我这里有个示例,你可以看看你的怎么修改
/**
* @zh
* 更新动画枚举
*/
private updateAnimationEnum(){
if(CC_EDITOR){
if(this._uiAnimation){
let enumMap:{[key:string]:number} = {
'<None>' : 0
};
this._uiAnimation.getClips().forEach((v,i)=>{ enumMap[v.name] = i + 1; });
// @ts-ignore
cc.Class.Attr.setClassAttr(this, 'openAnimation', 'enumList', cc.Enum.getList(enumMap));
// @ts-ignore
cc.Class.Attr.setClassAttr(this, 'closeAnimation', 'enumList', cc.Enum.getList(enumMap));
}else{
// @ts-ignore
cc.Class.Attr.setClassAttr(this, 'openAnimation', 'enumList', cc.Enum.getList(cc.Enum(TempAnimtionEnum)));
// @ts-ignore
cc.Class.Attr.setClassAttr(this, 'closeAnimation', 'enumList', cc.Enum.getList(cc.Enum(TempAnimtionEnum)));
}
if(this.node){
Editor.Utils.refreshSelectedInspector('node', this.node.uuid);
}
}
}
如何在不继承component的情况下动态修改对象实例的属性的type
因为这个类继承了component就不能成为其它类的属性的type了
类似这样

cc.class 的类应该都可以, 不一定要继承 component
但不继承component就会跟类绑定,改一个其它所有的实例都会变了
就是不能 cc.Class.Attr.setClassAttr(this, ‘closeAnimation’, ‘enumList’, cc.Enum.getList(cc.Enum(TempAnimtionEnum)));
只能 cc.Class.Attr.setClassAttr(Animation, ‘closeAnimation’, ‘enumList’, cc.Enum.getList(cc.Enum(TempAnimtionEnum)))
其他使用方式只有自己研究下了, 可能需要自定义 inspector吧
那你当时是怎么处理的呀
我的, 上面那个写法已经满足要求了
好吧,谢谢