fix(地图): 反转英雄卡牌排序逻辑以匹配渲染顺序

由于 cc.Layout 的节点渲染顺序与之前手动排序逻辑相反,导致英雄卡牌位置错乱。现在将排序规则改为 x 坐标越小(越靠后排)的 index 越小,并移除手动位置计算,完全依赖 Layout 自动排版。
This commit is contained in:
walkpan
2026-04-08 08:48:09 +08:00
parent 81a07bc16c
commit 72b31037f5

View File

@@ -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);
}
}