RenderTree.ts 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. import { _decorator, Component, Node, Vec3, systemEvent, SystemEventType, macro, EventKeyboard, Enum } from 'cc';
  2. const { ccclass, property } = _decorator;
  3. export enum RenderDirection {
  4. x,
  5. y
  6. }
  7. export enum RenderSort {
  8. up,
  9. Down
  10. }
  11. /**
  12. * @description 深度排序,通过指定容器中的node节点Y值,自动更改node节点的渲染顺序(Y值小的遮挡Y值大的node对象)
  13. * @author 王锡铜、袁浩
  14. */
  15. @ccclass('RenderTree')
  16. export class RenderTree extends Component {
  17. @property({ type: Enum(RenderDirection), tooltip: "渲染方向" }) dir: RenderDirection = RenderDirection.y;
  18. @property({ type: Enum(RenderSort), tooltip: "渲染排序方式" }) sort: RenderSort = RenderSort.Down;
  19. update(deltaTime: number) {
  20. let tempArray = this.node.children.concat();
  21. let sortArray = [];
  22. if (this.dir == RenderDirection.y) {
  23. sortArray = tempArray.sort(function (a, b): number {
  24. if (a.position.y > b.position.y) {
  25. return -1;
  26. } else {
  27. return 1;
  28. }
  29. });
  30. } else {
  31. sortArray = tempArray.sort(function (a, b): number {
  32. if (a.position.x > b.position.x) {
  33. return -1;
  34. } else {
  35. return 1;
  36. }
  37. });
  38. }
  39. for (let i = 0; i < sortArray.length; i++) {
  40. sortArray[i].setSiblingIndex(this.sort == RenderSort.Down ? i : sortArray.length - i - 1);
  41. }
  42. }
  43. }