diff --git a/assets/script/game/map/MissionCardComp.ts b/assets/script/game/map/MissionCardComp.ts index 655826b6..208f1577 100644 --- a/assets/script/game/map/MissionCardComp.ts +++ b/assets/script/game/map/MissionCardComp.ts @@ -841,12 +841,11 @@ export class MissionCardComp extends CCComp { const bView = bEnt?.get(HeroViewComp); const aMove = aEnt?.get(MoveComp); const bMove = bEnt?.get(MoveComp); - // 排序逻辑: - // 1. 如果有 x 坐标,按照 x 坐标从大到小(在前面)排序 - // 2. 如果没有 x 坐标,默认退化到按照生成顺序或 eid 排序 + // 排序逻辑反转:适应 cc.Layout 的节点渲染顺序(先渲染/index小的在左边) + // 1. x 坐标越小(越靠后排)的,index 应该越小 const aFrontScore = aView?.node?.position?.x ?? -999999; const bFrontScore = bView?.node?.position?.x ?? -999999; - if (aFrontScore !== bFrontScore) return bFrontScore - aFrontScore; + if (aFrontScore !== bFrontScore) return aFrontScore - bFrontScore; const aSpawnOrder = aMove?.spawnOrder ?? 0; const bSpawnOrder = bMove?.spawnOrder ?? 0; @@ -861,11 +860,8 @@ export class MissionCardComp extends CCComp { const item = sortedItems[index]; if (!item.node || !item.node.isValid) continue; - // 使用 Widget 布局的话需要禁用它或者单纯调整位置 - // 这里我们使用绝对坐标进行排列,假设是从左到右 - const targetX = index * (this.heroInfoItemGap + this.heroInfoItemSpacing); - const pos = item.node.position; - item.node.setPosition(targetX, pos.y, pos.z); + // 既然使用了 cc.Layout 进行自动排版,我们只需设置渲染顺序 + // Layout 会自动根据 siblingIndex 对所有子节点重新排位 item.node.setSiblingIndex(index); } }