diff --git a/design/qa/ui-audit-2026-10-06/pairs/pair_2_camp.png b/design/qa/ui-audit-2026-10-06/pairs/pair_2_camp.png index ede4e6e5..db8b78b1 100644 Binary files a/design/qa/ui-audit-2026-10-06/pairs/pair_2_camp.png and b/design/qa/ui-audit-2026-10-06/pairs/pair_2_camp.png differ diff --git a/design/qa/ui-audit-2026-10-06/real/real_2_camp.png b/design/qa/ui-audit-2026-10-06/real/real_2_camp.png index 82ab9e62..396ec8cd 100644 Binary files a/design/qa/ui-audit-2026-10-06/real/real_2_camp.png and b/design/qa/ui-audit-2026-10-06/real/real_2_camp.png differ diff --git a/design/qa/ui-audit-vs-demo-2026-10-06.md b/design/qa/ui-audit-vs-demo-2026-10-06.md index 34689510..90d41538 100644 --- a/design/qa/ui-audit-vs-demo-2026-10-06.md +++ b/design/qa/ui-audit-vs-demo-2026-10-06.md @@ -74,7 +74,7 @@ demo 石皮框板+两列对齐行(label 列/控制列)+减动效行;实机 | 屏 | 判定 | 闭环内容 | 留档差异(非本轮差距) | |---|---|---|---| | ①标题 | **pass** | 主操作语义反转(有档=继续上局主黄钮);背景=暖棕底+石纹 0.14+斜光带+暗角 | demo 玩法速览牌已按用户令删除,不回补 | -| ②营地 | **pass** | 背景氛围层(可见处石纹微弱+暗角) | 面板明度/行密度/关闭钮位=camp ⑦ 遗留(06 留档) | +| ②营地 | **pass**(用户实机复检后二次修复) | 背景氛围层(可见处石纹微弱+暗角);**用户实机两缺陷修(2026-10-06)**:①底改不透明暖亮档(原 0.45 半透 dim 在石纹降 0.14 后底下对局画面透出——demo #v-camp=bg-bright 实底同款)②三柜 EXPAND_FILL 等宽分屏+行标签截断兜底(原行标签按文字全宽算 min,进度/状态长文案随档变长把三柜总宽撑爆 1248=右柜裁出屏)+状态列 tooltip 兜底 | 面板明度/行密度/关闭钮位=camp ⑦ 遗留(06 留档) | | ③设置 | **pass** | 两列对齐(label 定宽 140)+返回钮紧凑 90+主音量滑轨实高修(HSlider 槽按 stylebox min 高绘制缺陷) | 减动效行不拆=reduced_motion 单设置同驱 motion_scale+结算演播(语义命名批裁决,demo 两行=同一设置) | | ④地图 | **pass** | 底栏 85px 定高单条+放弃 90 小钮+特性行限宽截断+深墨;顶栏关卡名框板+GP 烛光胶囊+两极排布;背景暖棕渐变 | 道具槽段位=台账 352 功能欠账(非呈现层) | | ⑤战斗 | **pass** | 背景氛围层成立;轮次条/上轮摘要结构一致 | 棋盘底板融景、左栏编排、站桩紧凑度=battle ⑤ 遗留(06 留档) | diff --git a/game/presentation/views/camp_overlay_view.gd b/game/presentation/views/camp_overlay_view.gd index a9a097a7..aa31e3ad 100644 --- a/game/presentation/views/camp_overlay_view.gd +++ b/game/presentation/views/camp_overlay_view.gd @@ -38,9 +38,11 @@ var _recent_list: Label # 最近冒险(逐行拼接 label——只读 func _init() -> void: - var dim := UiKit.modal_dim(self, Color(0, 0, 0, 0.45)) # 方向稿=石纹底透出(浅 dim——石纹全屏底担当氛围) - # 石纹弱质感+暗角(UI 对齐批 T5 2026-10-06——demo .tilebg 0.14/.vignette;旧满铺石纹不透退役; - # 缺位不挂即回退平 dim) + # 底=不透明暖亮档(2026-10-06 用户实测缺陷修——原形制=0.45 半透 dim+满铺石纹遮底,T5 石纹降 0.14 + # 后底下屏幕透出〔用户实机:对局中开营地见棋盘/战斗提示条〕;demo #v-camp=bg-bright 实底, + # 遮蔽语义由组合根输入锁兜底) + var dim := UiKit.modal_dim(self, UiKit.BG_BRIGHT) + # 石纹弱质感+暗角(UI 对齐批 T5 2026-10-06——demo .tilebg 0.14/.vignette;缺位不挂即回退平色) var bd := UiKit.backdrop_tile() if bd != null: dim.add_child(bd) @@ -90,6 +92,9 @@ func _init() -> void: bal_row.add_child(_balance_label) # ── 三柜台列(方向稿同构:头带深棕+米色板身)── + # 三柜等宽分配(2026-10-06 用户实测缺陷修——原定宽 356+行标签按文字全宽算 min,进度行文案 + # 「累计通关 28/2 次·能力封存中」随档变长把面板撑爆,三柜总宽溢出 1248 可用宽=右柜裁出屏; + # 改=EXPAND_FILL 等比分屏宽+行标签截断兜底,min 恒 ≤ 定宽) var mid := HBoxContainer.new() mid.add_theme_constant_override("separation", 18) mid.alignment = BoxContainer.ALIGNMENT_CENTER @@ -97,7 +102,9 @@ func _init() -> void: col.add_child(mid) _forge_holder = VBoxContainer.new() _forge_holder.add_theme_constant_override("separation", 6) - mid.add_child(_counter_panel("属性锻造", UiKit.TEX_ICON_FORGE, _forge_holder, 356)) + var forge_panel := _counter_panel("属性锻造", UiKit.TEX_ICON_FORGE, _forge_holder, 356) + forge_panel.size_flags_horizontal = Control.SIZE_EXPAND_FILL + mid.add_child(forge_panel) # 迭代 11 第①批 T4 工坊扩容(P2 甲程序占位——同调装配段+Y 升级行入工坊柜台,行板复用;行数增长以 # 柜台内滚承载,冻结三柜台版式与另两柜台零触碰,视觉终稿归营地批) var ws_scroll := ScrollContainer.new() @@ -106,9 +113,13 @@ func _init() -> void: _workshop_holder = VBoxContainer.new() _workshop_holder.add_theme_constant_override("separation", 6) ws_scroll.add_child(_workshop_holder) - mid.add_child(_counter_panel("道具工坊", UiKit.TEX_ICON_WORKSHOP, ws_scroll, 356)) + var ws_panel := _counter_panel("道具工坊", UiKit.TEX_ICON_WORKSHOP, ws_scroll, 356) + ws_panel.size_flags_horizontal = Control.SIZE_EXPAND_FILL + mid.add_child(ws_panel) var atlas_holder := VBoxContainer.new() - mid.add_child(_counter_panel("奖励格图鉴", UiKit.TEX_ICON_ATLAS, atlas_holder, 356)) + var atlas_panel := _counter_panel("奖励格图鉴", UiKit.TEX_ICON_ATLAS, atlas_holder, 356) + atlas_panel.size_flags_horizontal = Control.SIZE_EXPAND_FILL + mid.add_child(atlas_panel) var lock_l := UiKit.label(" —— 柜台结构位预留:内容排 Alpha(地图战斗资源差异化批)",UiKit.FS_HINT, false, UiKit.STONE) lock_l.autowrap_mode = TextServer.AUTOWRAP_WORD_SMART lock_l.custom_minimum_size = Vector2(300, 0) @@ -273,6 +284,7 @@ func refresh_camp(data: Dictionary) -> void: st_col = UiKit.GOLD_DEEP card.status_l.text = st_text card.status_l.add_theme_color_override("font_color", st_col) + card.status_l.tooltip_text = st_text # 截断兜底(状态列 EXPAND_FILL 吸余宽——悬停看全文) # 同调装配段状态就地刷(迭代 11 第①批 T4——Slots 点亮/满位禁选/Y 升级行余额联动) var att: Dictionary = data.get("attune", {}) if _attune_header_l != null: @@ -305,7 +317,7 @@ func _build_forge_row(holder: VBoxContainer, row: Dictionary) -> Dictionary: var card := PanelContainer.new() card.add_theme_stylebox_override("panel", UiKit.panel_flat(ROW_PLATE_COL, UiKit.PANEL_BORDER,UiKit.RADIUS_OBJECT, 1, Vector4(10, 4, 10, 4))) var line := HBoxContainer.new() - line.add_theme_constant_override("separation", 12) + line.add_theme_constant_override("separation", 8) # 2026-10-06 营地溢出修(12→8——行 min 压回定宽内) card.add_child(line) var attr := String(row.get("attr", "")) # M3(UI 落码批):行首 20px 语义图标(图标+形状+颜色三通道——demo ②;子串映射容错 attr 键名演进) @@ -325,6 +337,8 @@ func _build_forge_row(holder: VBoxContainer, row: Dictionary) -> Dictionary: line.add_child(ic) var name_l := UiKit.label("%s %+d/级" % [String(row.get("display_name", "")), int(row.get("flat", 0))], 14, true, UiKit.INK) name_l.custom_minimum_size = Vector2(112, 0) + name_l.clip_text = true # 2026-10-06 营地溢出修——文字全宽不入 min(三柜等宽分配前提) + name_l.text_overrun_behavior = TextServer.OVERRUN_TRIM_ELLIPSIS line.add_child(name_l) var level_l := UiKit.label("",UiKit.FS_HINT, true, UiKit.INK_ON_DEEP) # M3:Lv 章化(木底小章——demo lvtag;Label normal 槽挂样式盒) @@ -333,6 +347,8 @@ func _build_forge_row(holder: VBoxContainer, row: Dictionary) -> Dictionary: line.add_child(level_l) var price_l := UiKit.label("",UiKit.FS_HINT, false, UiKit.STONE) price_l.custom_minimum_size = Vector2(64, 0) + price_l.clip_text = true + price_l.text_overrun_behavior = TextServer.OVERRUN_TRIM_ELLIPSIS line.add_child(price_l) var btn := UiKit.button("锻造 +1 级", 0.0) # 柜台行板紧凑钮豁免宽度基准 btn.pressed.connect(_emit_buy_requested.bind(attr)) @@ -353,12 +369,19 @@ func _rebuild_workshop(data: Dictionary) -> void: card.add_child(line) var name_l := UiKit.label(String(row.get("display_name", "")),UiKit.FS_HINT, true, UiKit.INK) name_l.custom_minimum_size = Vector2(132, 0) + name_l.clip_text = true + name_l.text_overrun_behavior = TextServer.OVERRUN_TRIM_ELLIPSIS line.add_child(name_l) var progress_l := UiKit.label("",UiKit.FS_HINT, false, UiKit.STONE) - progress_l.custom_minimum_size = Vector2(110, 0) + progress_l.custom_minimum_size = Vector2(150, 0) # 2026-10-06 修——110 截掉阈值数字(「累计通关 28 / 2 次」≈154px) + progress_l.clip_text = true # 营地溢出修——文字全宽不撑柜 + progress_l.text_overrun_behavior = TextServer.OVERRUN_TRIM_ELLIPSIS line.add_child(progress_l) # 状态色随卡⑭ 亮板双色墨制(深墨族替代暖白族)——色随刷新态条件赋值,非机械两行式(T4 收口保留) var status_l := UiKit.label("",UiKit.FS_HINT, true, UiKit.STONE) + status_l.clip_text = true # 同上——「已解锁 · 能力封存中」不撑柜(余宽吸收者) + status_l.text_overrun_behavior = TextServer.OVERRUN_TRIM_ELLIPSIS + status_l.size_flags_horizontal = Control.SIZE_EXPAND_FILL line.add_child(status_l) _workshop_holder.add_child(card) _workshop_rows.append({"item_id": String(row.get("item_id", "")), "progress_l": progress_l, "status_l": status_l}) @@ -380,6 +403,8 @@ func _rebuild_attune(data: Dictionary) -> void: line.add_theme_constant_override("separation", 6) var name_l := UiKit.label(String(row.get("display_name", "")),UiKit.FS_HINT, true, UiKit.INK) name_l.custom_minimum_size = Vector2(96, 0) + name_l.clip_text = true + name_l.text_overrun_behavior = TextServer.OVERRUN_TRIM_ELLIPSIS line.add_child(name_l) var form_l := UiKit.label("被动" if String(row.get("form", "")) == "passive" else "主动·充能",UiKit.FS_CAPTION, false, UiKit.STONE) form_l.custom_minimum_size = Vector2(58, 0)