setSiblingIndex
对这种2d场景中所有物体,动态按y来排序性能应该不太好,每次set都有一次查找、删除、插入。实际来说,游戏有所有的y坐标信息,一次排序,和一次赋值就可以了。所以这个场景还是建议用被标记弃用的UITransform的priority属性来设置。
//每次设置都有:2-3倍的数组长度相关的操作
public setSiblingIndex (index: number) {
if (!this._parent) {
return;
}
if (this._parent._objFlags & Deactivating) {
errorID(3821);
return;
}
const siblings = this._parent._children;
index = index !== -1 ? index : siblings.length - 1;
const oldIndex = siblings.indexOf(this);
if (index !== oldIndex) {
siblings.splice(oldIndex, 1);
if (index < siblings.length) {
siblings.splice(index, 0, this);
} else {
siblings.push(this);
}
所以又又又回到了这里…
UITransform 组件参考 · Cocos Creator
需要注意的是,不能直接将
siblingIndex
属性等同于priority
(已废弃)属性来理解使用,它们的意义是不同的,改变siblingIndex
属性需要理解并清楚其代表的是在父节点下的位置,且在节点树变化时会发生变化,并且只能通过setSiblingIndex
方法来修改siblingIndex
属性。
考虑到节点快捷排序的需求,我们会在之后的版本中提供更方便快捷的接口供用户排列节点使用。