请问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赞
这不是不能序列化,只是编辑器没能显示。麻烦加个 type
1赞
如果是新版语法@property的话数组要怎么写呢?
@property([Node])
public StartPoints:Node[];
这样写的话编辑器面板里不会显示这个变量
@property(Array)
public StartPoints:Array;
用Array的话能显示出变量但是功能不正常,没有赋值栏,编辑器会报错
1赞
你原来的写法是对的,检查一下是不是其它地方导致的问题
我看不出来为什么,编辑器没有任何报错
@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
1赞
感谢,确实是少了上面那一行ccclass,不过这个调用得list[0].nodeList[0]这样调用,而不能直接list[0][0],不知道是不是这个只能这样了
list[0]是个对象,list[0][0]这样肯定不能啊。