import { _decorator, Component, Node, Vec3, systemEvent, SystemEventType, macro, EventKeyboard, Enum } from 'cc'; const { ccclass, property } = _decorator; export enum RenderDirection { x, y } export enum RenderSort { up, Down } /** * @description 深度排序,通过指定容器中的node节点Y值,自动更改node节点的渲染顺序(Y值小的遮挡Y值大的node对象) * @author 王锡铜、袁浩 */ @ccclass('RenderTree') export class RenderTree extends Component { @property({ type: Enum(RenderDirection), tooltip: "渲染方向" }) dir: RenderDirection = RenderDirection.y; @property({ type: Enum(RenderSort), tooltip: "渲染排序方式" }) sort: RenderSort = RenderSort.Down; update(deltaTime: number) { let tempArray = this.node.children.concat(); let sortArray = []; if (this.dir == RenderDirection.y) { sortArray = tempArray.sort(function (a, b): number { if (a.position.y > b.position.y) { return -1; } else { return 1; } }); } else { sortArray = tempArray.sort(function (a, b): number { if (a.position.x > b.position.x) { return -1; } else { return 1; } }); } for (let i = 0; i < sortArray.length; i++) { sortArray[i].setSiblingIndex(this.sort == RenderSort.Down ? i : sortArray.length - i - 1); } } }