From c78502c4ff430963163580bbdbf8ea320ecf0446 Mon Sep 17 00:00:00 2001 From: pan Date: Thu, 6 Aug 2026 19:51:26 +0800 Subject: [PATCH] =?UTF-8?q?fix(equipBox):=20=E4=BF=AE=E6=AD=A3=E8=A3=85?= =?UTF-8?q?=E5=A4=87=E5=BC=B9=E7=AA=97=E6=98=BE=E7=A4=BA=E5=B1=82=E7=BA=A7?= =?UTF-8?q?=E5=92=8C=E4=BD=8D=E7=BD=AE=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 调整ibox预制体的尺寸和对齐参数适配新布局 2. 修改弹窗挂载层级,避免被其他元素遮挡 3. 修正弹窗位置计算逻辑,适配新的父节点坐标系 --- assets/resources/gui/element/ibox.prefab | 14 +++++++------- assets/script/game/map/EquipBoxComp.ts | 23 ++++++++++++++++------- 2 files changed, 23 insertions(+), 14 deletions(-) diff --git a/assets/resources/gui/element/ibox.prefab b/assets/resources/gui/element/ibox.prefab index 53589033..47dd7aeb 100644 --- a/assets/resources/gui/element/ibox.prefab +++ b/assets/resources/gui/element/ibox.prefab @@ -786,7 +786,7 @@ }, "_lpos": { "__type__": "cc.Vec3", - "x": 2.5, + "x": 0, "y": 0, "z": 0 }, @@ -827,8 +827,8 @@ }, "_contentSize": { "__type__": "cc.Size", - "width": 715, - "height": 120 + "width": 720, + "height": 200 }, "_anchorPoint": { "__type__": "cc.Vec2", @@ -900,10 +900,10 @@ }, "_alignFlags": 45, "_target": null, - "_left": 5, + "_left": 0, "_right": 0, - "_top": 0, - "_bottom": 0, + "_top": 540, + "_bottom": 540, "_horizontalCenter": 0, "_verticalCenter": 0, "_isAbsLeft": true, @@ -1079,7 +1079,7 @@ "_contentSize": { "__type__": "cc.Size", "width": 720, - "height": 120 + "height": 1280 }, "_anchorPoint": { "__type__": "cc.Vec2", diff --git a/assets/script/game/map/EquipBoxComp.ts b/assets/script/game/map/EquipBoxComp.ts index cebf6b39..b319d7ef 100644 --- a/assets/script/game/map/EquipBoxComp.ts +++ b/assets/script/game/map/EquipBoxComp.ts @@ -31,7 +31,7 @@ * - smc.mission —— 游戏运行状态 */ import { mLogger } from "../common/Logger"; -import { _decorator, Node, Prefab, Sprite, Label, Vec3, instantiate, tween, v3, Tween, NodeEventType } from "cc"; +import { _decorator, Node, Prefab, Sprite, Label, Vec3, instantiate, tween, v3, Tween, NodeEventType, UITransform } from "cc"; import { ecs } from "../../../../extensions/oops-plugin-framework/assets/libs/ecs/ECS"; import { CCComp } from "../../../../extensions/oops-plugin-framework/assets/module/common/CCComp"; import { CardTriggerType } from "../common/config/CardSet"; @@ -198,16 +198,25 @@ export class EquipBoxComp extends CCComp { oops.audio.playEffect("music/button"); this.iboxNode = instantiate(this.iboxPrefab); - // 挂到装备图标的父节点下,使用局部坐标系 - const parent = this.node.parent; - parent?.addChild(this.iboxNode); - // 弹窗宽度 720,X 居中为 0,Y 相对图标向上偏移 - this.iboxNode.setPosition(0, this.node.position.y + EquipBoxComp.IBOX_OFFSET_Y, this.node.position.z); + // 挂到 ebars_node 的父级(再上移一层),确保 IBox 渲染在装备槽整个区域之上不被遮挡; + // 坐标换算到该容器坐标系,使 IBox 出现在装备正上方 + const ebar = this.node.parent; + const ebarsNode = ebar?.parent; + const container = ebarsNode?.parent ?? ebarsNode ?? ebar; + container?.addChild(this.iboxNode); + // 弹窗宽度 720,X 居中为 0,Y 相对装备向上偏移(换算到 container 坐标系) + let localY = this.node.position.y + EquipBoxComp.IBOX_OFFSET_Y; + if (container && ebar && container !== ebar) { + const worldPos = this.node.getWorldPosition(new Vec3()); + const localPos = container.getComponent(UITransform)!.convertToNodeSpaceAR(worldPos); + localY = localPos.y + EquipBoxComp.IBOX_OFFSET_Y; + } + this.iboxNode.setPosition(0, localY, this.node.position.z); mLogger.log(this.debugMode, "EquipBoxComp", "ibox instantiated", { iboxNodeValid: this.iboxNode?.isValid, iboxNodeActive: this.iboxNode?.active, iboxNodePos: this.iboxNode?.position, - parentName: parent?.name, + parentName: container?.name, }); const ibox = this.iboxNode.getComponent(IBoxComp); mLogger.log(this.debugMode, "EquipBoxComp", "ibox component", {