From 8e490b4130bd123fc3c8ba6259a266199bf3dd59 Mon Sep 17 00:00:00 2001 From: DKChan <524912269@qq.com> Date: Tue, 6 Oct 2026 04:26:23 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E7=94=A8=E6=88=B7=E5=AE=9E=E6=9C=BA?= =?UTF-8?q?=E5=8F=8D=E9=A6=88=E4=B8=A4=E7=BC=BA=E9=99=B7=E2=80=94=E2=80=94?= =?UTF-8?q?=E2=91=A0=E6=A0=87=E9=A2=98=E5=B1=8F=E7=8E=A9=E6=B3=95=E6=96=87?= =?UTF-8?q?=E5=AD=97=E5=A2=99=E6=95=B4=E4=B8=AA=E5=88=A0=E9=99=A4=EF=BC=88?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E4=BB=A4=EF=BC=9A=E7=95=8C=E9=9D=A2=E7=A6=81?= =?UTF-8?q?=E7=8E=A9=E6=B3=95=E8=AF=B4=E6=98=8E=E6=96=87=E5=AD=97=E5=A2=99?= =?UTF-8?q?=EF=BC=8C=E6=95=99=E5=AD=A6=E5=86=85=E5=AE=B9=E5=BD=92Beta?= =?UTF-8?q?=E5=B8=AE=E5=8A=A9=E6=89=8B=E5=86=8C=E3=80=94=E6=95=99=E5=AD=A6?= =?UTF-8?q?=E5=BC=95=E5=AF=BC=E5=AE=9A=E7=A8=BF=E6=89=B9P4=E4=B8=99?= =?UTF-8?q?=E3=80=95=EF=BC=9B=E5=8E=86=E5=8F=B2=E6=96=87=E6=A1=88=E5=9C=A8?= =?UTF-8?q?git=EF=BC=9Bui=5Fassembler=E5=B8=AE=E5=8A=A9=E7=89=8C=E5=9D=97+?= =?UTF-8?q?=E6=B3=A8=E8=AE=B0=E6=8D=A2=E4=BB=A3=EF=BC=89=E2=91=A1=E9=92=AE?= =?UTF-8?q?=E9=AB=98=E7=BA=AA=E5=BE=8BBUTTON=5FMIN=5FH=3D40=E5=8D=95?= =?UTF-8?q?=E7=82=B9=E7=AB=8B=EF=BC=88=E4=B8=BB/=E5=8D=B1/=E5=B8=B8?= =?UTF-8?q?=E8=A7=84=E9=92=AE=E7=BB=9F=E4=B8=80=E6=9C=80=E5=B0=8F=E9=AB=98?= =?UTF-8?q?=E2=80=94=E2=80=94=E4=B8=BB=E9=92=AE26px=E5=AF=B9=E5=B8=B8?= =?UTF-8?q?=E8=A7=8438px=E4=B8=8D=E9=BD=90=E6=B2=BB=E6=A0=B9=EF=BC=9Bmin?= =?UTF-8?q?=5Fw=3D0=E7=B4=A7=E5=87=91=E4=BD=8D=E8=B1=81=E5=85=8D=E5=90=8C?= =?UTF-8?q?=E5=AE=BD=E5=BA=A6=E7=BA=AA=E5=BE=8B=EF=BC=89+ui=5Fstruct=5Fpro?= =?UTF-8?q?be=20equal=5Fheight=E5=90=8C=E5=AE=B9=E5=99=A8=E9=92=AE?= =?UTF-8?q?=E9=AB=98=E6=96=AD=E8=A8=80=E6=97=8F=EF=BC=9B=E8=BD=BB=E9=97=B8?= =?UTF-8?q?=E5=86=92=E7=83=9F782/0+=E4=B8=89=E6=8E=A2=E9=92=88=E7=BB=BF?= =?UTF-8?q?=EF=BC=88equal=5Fheight=E5=85=A8=E5=B1=8F=E9=9B=B6=E7=BA=A2?= =?UTF-8?q?=E9=A6=96=E8=B7=91=E5=8D=B3=E8=BF=87=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- game/presentation/ui_assembler.gd | 17 ++++------------- game/presentation/views/ui_kit.gd | 7 ++++++- game/smoke/ui_struct_probe.gd | 18 ++++++++++++++++-- 3 files changed, 26 insertions(+), 16 deletions(-) diff --git a/game/presentation/ui_assembler.gd b/game/presentation/ui_assembler.gd index ec843713..602f2d21 100644 --- a/game/presentation/ui_assembler.gd +++ b/game/presentation/ui_assembler.gd @@ -95,9 +95,10 @@ static func build_overlays(host: Control, db) -> Dictionary: # 开始覆盖层(返回 {overlay, box, lvbtn, resumebtn, campbtn, settingsbtn, quitbtn, dbgbtn}——按钮接线归组合根; # 迭代 14.5 调试整合批:随机种子/数值调整板/两层调试三散件撤出主按钮组,收进调试浮窗—— # 本层只留右下角「调试」角标入口(DS_DEBUG=1 门控归组合根),dbgbtn 即该角标。 -# UI 落码批 M2(2026-10-04):单列 VBox→双列(左操作 56% + 右舞台/帮助牌);按钮动词化+悬停解释 -#(解释全迁 tooltip,G5);lvbtn 升主操作钮(烛光黄 CANDLE);右列=立绘看台+玩法速览牌(帮助全文保留, -# 表值驱动不变);root 挂 UiKit.tooltip_theme() 全树生效。返回键集不变,组合根接线零改) +# UI 落码批 M2(2026-10-04):单列 VBox→双列(左操作 56% + 右舞台);按钮动词化+悬停解释 +#(解释全迁 tooltip,G5);lvbtn 升主操作钮(烛光黄 CANDLE);右列=立绘看台。**玩法速览牌已退役 +#(2026-10-06 用户令:界面禁玩法文字墙——教学内容归 Beta 帮助手册〔教学引导定稿批 P4 丙〕,历史文案在 git)**; +# root 挂 UiKit.tooltip_theme() 全树生效。返回键集不变,组合根接线零改) static func build_start_overlay(host: Control, db = null) -> Dictionary: var overlay := overlay_bg(host, UiKit.BG_BRIGHT) overlay.theme = UiKit.tooltip_theme() @@ -194,16 +195,6 @@ static func build_start_overlay(host: Control, db = null) -> Dictionary: pedestal.size_flags_horizontal = Control.SIZE_SHRINK_CENTER stage.add_child(pedestal) right.add_child(stage) - # 玩法帮助文案(表值驱动——2026-09-16 AP 压速批遗留硬编码 8 随手修正;护甲等级掷点批同步"减伤"→"护甲强化"; - # M2 容器化=石板牌承载〔文字禁直接压纹理/深底——§7.2〕,内容逐字保留含地形变异段) - var help_text := "玩法:每轮 %d AP——挖开(1AP)/插旗(1AP)/移动(免费)/连锁(免费)。\n每个非封锁格都藏一种格面资源(增伤/护甲强化/回血/爆裂/削弱)。开安全格、标中雷 = 正向兑付;\n开雷格、标错安全格 = 负向兑付——全部在轮末结算逐行兑现;吃掷点的基础攻击按护甲等级判定,无 miss、最低保底 1 点。\n停手:剩余 AP 转存 RAP;弃图刷新:RAP−%d 当场换图继续挖(每轮剩 %d 次)。\n敌人全灭胜、主角倒下负。悬停可看三态光标与可挖域微光。\n地形变异:第二关起 Boss 图带整图变异(贫矿脉——回复与护甲资源减少、攻击资源增多;开战横幅与 HUD 角标常驻提示)。" % [ - int(db.action_economy.ap_per_round), int(db.action_economy.rap_refresh_cost), int(db.action_economy.refresh_cap_per_round)] - var help_plate := PanelContainer.new() - help_plate.add_theme_stylebox_override("panel", UiKit.panel_skinned(Vector4(14, 10, 14, 10))) - help_plate.size_flags_horizontal = Control.SIZE_SHRINK_CENTER - var help := UiKit.label(help_text,UiKit.FS_BODY, false, UiKit.INK) - help_plate.add_child(help) - right.add_child(help_plate) return {"overlay": overlay, "box": box, "lvbtn": lvbtn, "resumebtn": resumebtn, diff --git a/game/presentation/views/ui_kit.gd b/game/presentation/views/ui_kit.gd index 2e6840ae..82973d64 100644 --- a/game/presentation/views/ui_kit.gd +++ b/game/presentation/views/ui_kit.gd @@ -312,11 +312,16 @@ static func scaled(base: int, pct: int) -> int: # 宽度纪律(ui-struct-probe 批 T3——全站按钮最小宽度基准 216+SIZE_FILL:VBox 列内拉满列宽等宽, # HBox 行内不抢余宽(EXPAND_FILL 会把行撑爆——营地底条 1616px 实证);角落小件/紧凑位传 0 豁免) +# 钮高纪律(2026-10-06 用户令「对齐好、不要那么细」——标题屏主钮 26px 对常规钮 38px 不齐的治根): +# 全站常规钮统一最小高 40(主操作钮/危险钮经 button() 同高对齐,压扁形态从此不存在); +# 豁免域与宽度纪律同款——min_w=0 紧凑位(HUD 顶条小钮/角标)不抬行高 +const BUTTON_MIN_H := 40.0 + static func button(text: String, min_w := 216.0) -> Button: var b := Button.new() b.text = text if min_w > 0.0: - b.custom_minimum_size = Vector2(min_w, 0) + b.custom_minimum_size = Vector2(min_w, BUTTON_MIN_H) b.size_flags_horizontal = Control.SIZE_FILL _apply_button_skin(b) return b diff --git a/game/smoke/ui_struct_probe.gd b/game/smoke/ui_struct_probe.gd index 301312e2..a64f806a 100644 --- a/game/smoke/ui_struct_probe.gd +++ b/game/smoke/ui_struct_probe.gd @@ -3,7 +3,8 @@ # 全 UI 屏结构断言一次跑完:逐屏实例化(菜单簇真驱动 + 冒险簇真流推进 + 兑付屏真实 open 面合成喂入), # 断言族: # ①overlap 同屏内可见未禁用按钮两两 global_rect 不相交(互压=红;层间模态盖底层系设计内——各屏采样以屏根为界天然排除) -# ②equal_width 同一直接父容器内 ≥2 可见按钮宽度差 >1px=红(容器纪律:组内等宽) +# ②equal_width 同一直接父容器内 ≥2 可见按钮宽度差 >1px=红(容器纪律:组内等宽;钮高族 +# equal_height 2026-10-06 增——同容器高度差 >1px=红,纪律=ui_kit BUTTON_MIN_H) # ③offscreen 可见件 global_rect 完全落在视口外=红 # ④zero_size 可见件宽或高 ≤0=红 # ⑤start 专项 标题屏左列(start_box)与右列(start_right)矩形不相交(M2 双列契约——叠放缺陷回归闸) @@ -237,7 +238,8 @@ func _audit(screen: String, roots: Array) -> void: if a.get_global_rect().intersects(b.get_global_rect()): problems.append("[%s][overlap] %s 与 %s 矩形相交(%s ∩ %s)" % [ screen, a.name, b.name, a.get_global_rect(), b.get_global_rect()]) - # ②equal_width:同一直接父容器内 ≥2 可见按钮宽度差 >1px + # ②equal_width + equal_height:同一直接父容器内 ≥2 可见按钮宽度/高度差 >1px + #(钮高族 2026-10-06 用户令「对齐好、不要细」——主钮 26px 对常规 38px 不齐回归闸;纪律=ui_kit BUTTON_MIN_H) var groups := {} for b in all_buttons: var k: Node = b.get_parent() @@ -249,13 +251,18 @@ func _audit(screen: String, roots: Array) -> void: if g.size() < 2: continue var w0: float = (g[0] as Control).size.x + var h0: float = (g[0] as Control).size.y var diff := false + var diff_h := false for b in g: if _wl(screen, "equal_width", b): diff = false + diff_h = false break if absf((b as Control).size.x - w0) > 1.0: diff = true + if absf((b as Control).size.y - h0) > 1.0: + diff_h = true if diff: var names: Array = [] var widths: Array = [] @@ -263,6 +270,13 @@ func _audit(screen: String, roots: Array) -> void: names.append(String((x as Control).name)) widths.append((x as Control).size.x) problems.append("[%s][equal_width] 同容器按钮宽度不一(%s——%s)" % [screen, str(names), str(widths)]) + if diff_h: + var names_h: Array = [] + var heights: Array = [] + for x in g: + names_h.append(String((x as Control).name)) + heights.append((x as Control).size.y) + problems.append("[%s][equal_height] 同容器按钮高度不一(%s——%s)" % [screen, str(names_h), str(heights)]) # ③offscreen + ④zero_size(ScrollContainer 内容坐标系超出=可滚动设计内——豁免) for c in all_ctls: if _in_scroll(c):