请问properties里面可以定义对象数组嘛?谢谢

请问properties里面可以定义对象数组嘛?谢谢

定义对象数组后,直接在可视化界面添加数据?是否可行

可以,根据文档 http://www.cocos.com/docs/creator/scripting/class.html

  • 当声明属性是一个数组时,可以在声明处填写他们的类型或构造函数来完成声明,如:
    properties: {
        any: [],      // 不定义具体类型的数组
        bools: [cc.Boolean],
        strings: [cc.String],
        floats: [cc.Float],
        ints: [cc.Integer],
        
        values: [cc.Vec2],
        nodes: [cc.Node],
        frames: [cc.SpriteFrame],
    }
  • 或者
properties: {
    names: {
        default: [],
        type: [cc.String]   // 用 type 指定数组的每个元素都是字符串类型
    },

    enemies: {
        default: [],
        type: [cc.Node]     // type 同样写成数组,提高代码可读性
    },
}
3赞

但是我想数组的类型是我自定义的一个class哇

那你可以这样写:

var MyClass = cc.Class(...);
....
properties: {
    names: {
        default: [],
        type: [MyClass]
    }
}
.....
2赞

1.4.2版本出现数组不能序列化的问题


1.5也有类似问题

这不是不能序列化,只是编辑器没能显示。麻烦加个 type

1赞

如果是新版语法@property的话数组要怎么写呢?
@property([Node])
public StartPoints:Node[];
这样写的话编辑器面板里不会显示这个变量

@property(Array)
public StartPoints:Array;
用Array的话能显示出变量但是功能不正常,没有赋值栏,编辑器会报错
Array
Error

1赞

你原来的写法是对的,检查一下是不是其它地方导致的问题

我看不出来为什么,编辑器没有任何报错
Stage
Node

@property(Node)

startPoints:Node[] = [];

这样试试呢

还是不行
如果是
@property(Node)
public StartPoints:number;
这样的话反而可以,看来问题出在变量的定义上,Node[]不被接受

@property({
    type: [Node]
})
startPoints: Node[] = [];
@property([Node])
startPoints:Node[] = [];

编辑器里如何显示数组里的数组?

class ArrayEditor{
    @property([])
    array= [];
}

@property([ArrayEditor])
 prefabs= [];

这样能在编辑器里显示出数组,但是无法编辑,无法拖入节点或prefab

image
image

1赞

感谢,确实是少了上面那一行ccclass,不过这个调用得list[0].nodeList[0]这样调用,而不能直接list[0][0],不知道是不是这个只能这样了

list[0]是个对象,list[0][0]这样肯定不能啊。