From 9e6f06804e5afa09ff18c18e646dd0f9a16cc150 Mon Sep 17 00:00:00 2001 From: DKChan <524912269@qq.com> Date: Sat, 26 Sep 2026 16:47:23 +0800 Subject: [PATCH] =?UTF-8?q?fix(presentation):=20=E7=95=8C=E9=9D=A2?= =?UTF-8?q?=E8=A1=A5=E6=95=B0=E6=89=B9=E2=80=94=E2=80=94=E8=A1=80=E9=87=8F?= =?UTF-8?q?=E6=95=B0=E5=AD=97=E3=80=8C=E5=BD=93=E5=89=8D/=E6=9C=80?= =?UTF-8?q?=E5=A4=A7=E3=80=8D=E8=90=BD=E6=9D=A1=EF=BC=88HUD=E6=A1=86?= =?UTF-8?q?=E6=9E=B6=20=E9=AA=8C=E6=94=B6=E3=80=8C=E8=A1=80=E9=87=8F?= =?UTF-8?q?=E6=95=B0=E5=AD=97=E5=8F=AF=E8=AF=BB=E3=80=8D=E6=AC=A0=E8=B4=A6?= =?UTF-8?q?+=E7=94=A8=E6=88=B7=E7=82=B9=E5=90=8D,=E7=99=BD=E5=AD=97?= =?UTF-8?q?=E6=B7=B1=E6=8F=8F=E8=BE=B9=E5=B1=85=E4=B8=AD=E6=9D=A1=E5=B8=A6?= =?UTF-8?q?=EF=BC=89+=E5=B0=8F=E4=BA=BA=E8=84=9A=E6=B5=AE=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3=EF=BC=88=E7=B4=A0=E6=9D=90=E9=80=8F=E6=98=8E=E7=95=99?= =?UTF-8?q?=E7=99=BD=E8=87=B4=E8=A7=86=E8=A7=89=E8=84=9A=E6=82=AC=E7=A9=BA?= =?UTF-8?q?=2012.75px,offset=20-16=E2=86=92-8.5=20=E5=9D=90=E6=A0=87?= =?UTF-8?q?=E6=8E=A8=E5=AF=BC=E7=95=99=E6=A1=A3=EF=BC=89+=E5=8F=B0?= =?UTF-8?q?=E8=B4=A6=20178?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- game/presentation/views/board_world.gd | 5 ++++- game/presentation/views/standee_body.gd | 11 ++++++++++- production/session-state/active.md | 3 ++- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/game/presentation/views/board_world.gd b/game/presentation/views/board_world.gd index 791c02a9..85fda58a 100644 --- a/game/presentation/views/board_world.gd +++ b/game/presentation/views/board_world.gd @@ -49,7 +49,10 @@ func ensure_hero(tex: Texture2D, shadow_px: Vector2, scale: float) -> Sprite2D: hero.texture = tex hero.texture_filter = CanvasItem.TEXTURE_FILTER_NEAREST hero.centered = true - hero.offset = Vector2(0.0, -16.0) # 纹理中点上移半高——position = 脚底中点 + # 脚浮修正(2026-09-26,样张预筛发现+用户实机确认的登记缺陷——台账 169/175 移交):素材底部 7 行全透明 + #(内容底 = 源 row 24,自中心 16-7.5=8.5px),旧 offset -16 按纹理底=内容底假设成立时脚悬空 8.5×1.5≈12.75px; + # 修正 offset.y = -8.5 → 内容底恰落 position(脚锚=格底往上 25% 线,台账 162 口径——头仍越上格沿) + hero.offset = Vector2(0.0, -8.5) # 纹理中心上移 8.5 源 px——position = 视觉脚底中点 hero.z_index = 1 hero.use_parent_material = true add_child(hero) diff --git a/game/presentation/views/standee_body.gd b/game/presentation/views/standee_body.gd index 13720af2..903e5c84 100644 --- a/game/presentation/views/standee_body.gd +++ b/game/presentation/views/standee_body.gd @@ -48,6 +48,7 @@ var _enemy_id := "" var _armor := "light" var _dead := false var _hp_max := 1.0 +var _hp_cur := 0 # 血量数字显示面(HUD框架 验收「血量数字可读」——2026-09-26 用户点名补数) var hp_value := 1.0: # 血条值 0..1(直角递减——tween_property 目标,逐行刷新重启不累积) set(v): hp_value = clampf(v, 0.0, 1.0) @@ -108,7 +109,8 @@ func set_hero(hp: int, max_hp: int) -> void: # 血条短 tween 递减(直角递减占位——密度/缓动终稿归战斗表现批);逐行刷新时重启 tween 不累积 func _set_hp(hp: int) -> void: - var target := float(clampi(hp, 0, int(_hp_max))) / _hp_max + _hp_cur = clampi(hp, 0, int(_hp_max)) + var target := float(_hp_cur) / _hp_max if _hp_tween != null and _hp_tween.is_valid(): _hp_tween.kill() _hp_tween = create_tween() @@ -309,6 +311,13 @@ func _draw() -> void: var fill_w := bar_w * hp_value if fill_w > 0.0: draw_rect(Rect2(bar_x, 2, fill_w, 10), Color(0.41, 0.61, 0.91)) # 直角填充(默认主题蓝近似——直角递减) + # 血量数字「当前/最大」居中压条(白字+深描边双通道——11px 于 10px 条带垂直居中; + # 数字=目标值即时刷新,条 tween 只管填充宽度;死残位 0/max 照常可读) + var hp_txt := "%d/%d" % [_hp_cur, int(_hp_max)] + var hts: Vector2 = f.get_string_size(hp_txt, HORIZONTAL_ALIGNMENT_LEFT, -1, 11) + var hbase := Vector2(bar_x + (bar_w - hts.x) * 0.5, 2.0 + 5.0 + 4.0) + f.draw_string(get_canvas_item(), hbase + Vector2(1, 1), hp_txt, HORIZONTAL_ALIGNMENT_LEFT, -1, 11, Color(0.10, 0.08, 0.06, 0.85)) + f.draw_string(get_canvas_item(), hbase, hp_txt, HORIZONTAL_ALIGNMENT_LEFT, -1, 11, Color(1, 1, 1, 0.95)) # 立绘:贴图在位 = Sprite2D(set_portrait_texture 落位);缺位 = 字形回退 if _portrait_sprite == null or _portrait_sprite.texture == null or not _portrait_sprite.visible: diff --git a/production/session-state/active.md b/production/session-state/active.md index 06c9c639..61ee460e 100644 --- a/production/session-state/active.md +++ b/production/session-state/active.md @@ -463,4 +463,5 @@ 173. **探针取证与断言同步批(Phase B T5,2026-09-26,本会话——循环 1;worktree battle-stage-node2d-20260926,零常驻代码变更)**:①**临时取证探针**(跑完即删,台账 152 先例;踩坑复录=裸 .gd 无 tscn 载体跑场景探针=静默挂死,补 tscn 包装解):真实战斗态 B 区场景树 dump——**世界子树(SubViewport 内)Button=0/GridContainer=0/HBox=0**(站桩载体归零证);世界站桩本体 hero=true+enemies=1(StandeeBody)、伴随件容器子件=1 与本体数一致;壳层 HBox 逐件语义标注=文本行载体+StatusSlotRow 伴随件+log 内部(零站桩载体残留)。②ui_probe 敌站桩断言等价改写已于 T3 随批落地(enemy_box 子件穿透明→stage.enemy_body_at(i).name_line_probe()/intent_probe()/has_world_hp_bar 本体出口,呈现口径逐字保持——台账 171 改判记录);ui_click_probe :223 hero_standee.slot_row 伴随件引用=零改动即兼容(tooltip 机制零返工——代拍板①实证)。③ui_input_probe 十一断言原样全绿(B 区改造零波及 D 区实证——grep stage/standee/enemy 零命中在案)。取证报告本条即档案。轻闸全绿(冒烟 557/0+五探针 PASS)。进入 T6。 174. **文档随批与登记批(Phase B T6,2026-09-26,本会话——循环 1)**:①architecture.md——Last Updated 行+D1 层表形态行补 BattleStageView 例外(StageWorld/StandeeBody,slot_row 伴随件留壳层,Phase A/B 双注记引 ADR-0006)。②HUD框架.md——v0.10 渲染技术注记行(Phase B 同构改造/契约不变/伴随件/C6 复用/预算不变/等价证明外链)。③battle.md——2026-09-26 实现注记修订行(B 区 Node2D 化/setter 面保持/弹道锚点壳层口径/外框 252px 零改动)。④board-node2d-migration-plan.md §3——「Phase B 预留」改写为「已落地」(实施面三点+挂点复用)+**样张硬前置条款按裁决①作废落文**(样张冻结只卡换皮/演出批=循环 2 前置,不卡结构迁移)。⑤Alpha 清单状态列更新(A5 已实证转周期化复跑件待建/F1F2 全绿注记/F4 待 T7 对拍+修订记录行)。⑥06 待办核对=本批无解决条目(呈现层测试分级条 B/C 档与本批无涉;样张硬前置非 06 登记项)。验证=文档三闸对 T0 基线逐字节零新增(lint/link/term 三 diff 空)+轻闸随批全绿。进入 T7。 176. **换肤最小可看批——格面瓦片接线+敌像槽接线+接触带微光切换(2026-09-26,本会话——用户令「其他任务子 agent 委派」;worktree skin-wiring-20260926,两个并行子 agent+主会话微光,主编排者统一跑闸)**:①**格面高墙瓦片接线**(子 agent A,按任务书+词表逐条)——board_view.gd 新增 16 墙+5 地面瓦片路径常量(单点本文件,ui_kit 让位并行避撞)+整批守卫装载 `_tiles_ok`(21 枚全成才启用,任一缺位整批静默回退程序化平色,禁同板混渲染,fresh checkout 安全)+查表合成器(16 正交情形 Python 穷举对词表逐条命中/镜像 6 件 flip_x 运行时合成禁旋转/凹角回落 nw>ne>sw>se/center 变体+地面 5 变体格坐标哈希 60/20/20——纯确定性无 RNG)+`_paint_cell` 瓦片分支(tex_base=查表件,bg_sb 降透明描边载体,呼吸/蓝框通道不变)+cell_unit `_draw` 瓦片态补画 bg_sb 覆盖层;非整数 NEAREST 缩放=台账 166 已拍板档。②**敌人立绘槽接线**(子 agent B)——ui_kit 八敌种 TEX_ENEMY_ 常量(§4.6.4 键集,域_对象键命名)+battle_stage_view `_enemy_portrait_tex` match 映射(显式函数,UiKit const 不可动态 get 已注记)+set_enemies 重建拍 set_portrait_texture 接线(tex=null 字形回退逐位等价——素材零张在库为预期态,入库即自动显示零代码换装);签名零变更,ui_probe 断言面零触碰。③**接触带微光切换**(主会话,§3.2 v2.8 画法落码)——旧「墙格整框绿相」退役(DIG_EDGE/DIG_EDGE_DEEP 常量删)→**英雄格周界空间侧**:正交邻墙=整条边/斜向=共享角点圆+两侧各半条边(坐标推导注释在案,SW/SE+NE/SE 两处半带首版写反已修),带宽 4px 贴格边,蓝族近白蓝 CONTACT_GLOW #D6ECFF↔CONTACT_GLOW_DEEP 呼吸 0.48Hz 保留,减动效停格静态可辨;承载=英雄格 CellUnit 三属性(bands/corners/col),refresh+set_dig_glow_enabled(true) 双挂点,rebuild 复位。**验证**——editor --quit 0 error+冒烟 557/0+五探针全绿(probe stage 外框逐位零漂移)+static_scan exit0+文档三闸对基线零漂移+**MC 12 局 sha256=de8225b3 与基线逐位一致**(渲染批零核心接触铁证)。**遗留知悉**——词表 §五已知限制未修(成对双凹角 1px 缝/混合凹角缺落点/平铺重复感,按纪律不顺手修);瓦片态字形经 NEAREST 采样微锐化=预期;素材缺位回退路径全部保留。**待实机目检**——格面瓦片观感/微光蓝带/墙群拼缝(用户终验,任务书 §3.5)。 -177. **呈现修复批——数字色牌落码+墙格轮廓加强(2026-09-26,本会话——用户实机三反馈之①③;worktree digit-plate-outline-20260926)**:①**数字消失根因=对比度死亡非逻辑丢失**——换肤批地面瓦片按图底分离纪律为暗色(亮度 ~50),现行游戏数字=深墨直写地面(旧浅地板 #B39A78 时代成立),墨 #33261B(亮度 ~40)对新地面 ~1.1:1 隐身;**修复=art-bible 原则二/§4.1 数字色牌落码**(素牌 #F5EAD3 直角 0.66/0.68 格边居中+牌缘线,已开格字形全垫牌〔数字/雷/?/人回退〕,旗=未开格不垫;可读不依赖格底,同时救回「雷」字可读性)——DIGIT_PLATE/DIGIT_PLATE_EDGE 常量入 ui_kit,paint 写 u.plate,CellUnit 字形段垫牌。②**轮廓加强**(反馈①「轮廓线不明显」)——墙格地面朝向边程序补 2px 深墨线(§8.5 结构归程序;素材 1px 墨线 45/36px 非整数缩放下视觉衰减;墙-墙内界不描保墙群内聚;paint 写 outline_sides,CellUnit 瓦片态 tile 后 bg_sb 前画——悬停金框/蓝框仍在其上)。③反馈②高墙感=研究件交付 `production/mockups/高墙感研究-2026-09-26.png`(同板四变体实瓦片拼样:A 现状/B+轮廓 2px/C+南立面双段暗带/D+地面投影;B/C/D 程序侧可做零素材重产,D 投影=ITB 同款高度线索推荐档),方案待用户挑档后落码。**验证**——editor --quit 0 error+冒烟 557/0+四探针绿(ui_probe/ui_input/ui_tune/click 问题=0)+MC 12 局 sha256=de8225b3 逐位一致+static_scan exit0。 \ No newline at end of file +177. **呈现修复批——数字色牌落码+墙格轮廓加强(2026-09-26,本会话——用户实机三反馈之①③;worktree digit-plate-outline-20260926)**:①**数字消失根因=对比度死亡非逻辑丢失**——换肤批地面瓦片按图底分离纪律为暗色(亮度 ~50),现行游戏数字=深墨直写地面(旧浅地板 #B39A78 时代成立),墨 #33261B(亮度 ~40)对新地面 ~1.1:1 隐身;**修复=art-bible 原则二/§4.1 数字色牌落码**(素牌 #F5EAD3 直角 0.66/0.68 格边居中+牌缘线,已开格字形全垫牌〔数字/雷/?/人回退〕,旗=未开格不垫;可读不依赖格底,同时救回「雷」字可读性)——DIGIT_PLATE/DIGIT_PLATE_EDGE 常量入 ui_kit,paint 写 u.plate,CellUnit 字形段垫牌。②**轮廓加强**(反馈①「轮廓线不明显」)——墙格地面朝向边程序补 2px 深墨线(§8.5 结构归程序;素材 1px 墨线 45/36px 非整数缩放下视觉衰减;墙-墙内界不描保墙群内聚;paint 写 outline_sides,CellUnit 瓦片态 tile 后 bg_sb 前画——悬停金框/蓝框仍在其上)。③反馈②高墙感=研究件交付 `production/mockups/高墙感研究-2026-09-26.png`(同板四变体实瓦片拼样:A 现状/B+轮廓 2px/C+南立面双段暗带/D+地面投影;B/C/D 程序侧可做零素材重产,D 投影=ITB 同款高度线索推荐档),方案待用户挑档后落码。**验证**——editor --quit 0 error+冒烟 557/0+四探针绿(ui_probe/ui_input/ui_tune/click 问题=0)+MC 12 局 sha256=de8225b3 逐位一致+static_scan exit0。 +178. **界面补数批——血量数字+小人脚浮修正(2026-09-26,本会话——用户实机点名「血条没有数字」+登记缺陷顺修;worktree ui-polish-20260926)**:①**血量数字「当前/最大」**(HUD框架 验收标准「敌人呈现…血量数字可读」欠账落码+用户点名)——StandeeBody 血条带内居中 11px 白字+深描边双通道(条带 10px 内垂直居中),_hp_cur 于 _set_hp 即时取目标值(条 tween 只管填充宽度,数字不延迟);主角/敌人通用,死残位 0/max 照常可读;setter 签名零变更。②**小人脚浮修正**(台账 169/175 移交登记缺陷——素材底部 7 行全透明,旧 offset -16 按纹理底=内容底假设致视觉脚悬空 8.5×1.5≈12.75px)——ensure_hero offset.y -16→-8.5(坐标推导注释在案:内容底=源 row 24,自中心 8.5px,×1.5 档恰落脚锚;头仍越上格沿),挥铲手位锚与精灵对齐反而归位。**验证**——editor --quit 0 error+冒烟 557/0+四探针绿+MC 12 局 sha256=de8225b3 逐位一致+static_scan exit0。 \ No newline at end of file