3.8 KiB
3.8 KiB
战斗舞台 Node2D 迁移 · 信号与演出等价证明(循环 1 T4,2026-09-26)
计划书 T4 验收件:时序常量逐字对照旧实现 + 写路径逐行同构(Phase A 先例成文化)+ 调用点 grep 对比零 diff。 对比基线 = T0 提交
3db7e87(迁移前现行态);迁移后 = worktree battle-stage-node2d-20260926 T3 提交。
1. 调用点 grep 对比(零 diff 实证)
| 面 | 命令 | 结果 |
|---|---|---|
| main.gd → stage 调用点(9 处:set_effects_cleared_feedback ×2 / gray_all_enemies ×2 / on_step_row_fx / enemy_standee_center / hero_standee_center / set_settle_focus / set_round_text) | grep -E "stage\.(hero_standee|enemy_standee_center|on_step_row_fx|gray_all_enemies|set_round_text|set_settle_focus|clear_enemies)" 老新对拍 |
逐字节一致(行号 309/310/439/441/475/495/503/768/770 全同) |
| hud_presenter.gd → hero_standee 投喂(4 处:set_hero ×2 / set_effects ×2) | 同法对拍 | 逐字节一致(行号 53/54/79/80 全同——单投喂结构零变) |
| hud_presenter.gd / main.gd / core/** 文件级 | git diff 3db7e87..HEAD --stat |
零行变更(投喂链零改动实证;核心层零接触) |
2. 时序常量逐字对照(旧 StandeeView → 新 StandeeBody)
| 演出 | 旧(Control + tween) | 新(Node2D + tween) | 判定 |
|---|---|---|---|
| 血条递减 | motion(0.15) tween bar value |
motion(0.15) tween hp_value 属性 |
同 |
| 意图弹入 | scale 1.6→ONE,motion(0.10)/motion(0.16) |
_intent_scale 1.6→1.0 同时长 |
同 |
| 立绘前倾 | rotation 4.0→0.0,motion(0.10)/motion(0.14) |
_glyph_rot 同值同时长(旧仅转字形 Label——贴图态无动画,新等价保持) |
同 |
| 死亡摇摆 | modulate (0.62,0.62,0.62,0.9);rotation 2.5→−1.5→0.0,motion(0.12)/(0.1)/(0.08) |
逐字同 | 同 |
| 受击闪白 | modulate (1.6,1.4,1.2) motion(0.08) → 白/死灰 motion(0.2) |
逐字同(终色按 _dead 分支同构) | 同 |
| 复活复位 | modulate 白、rotation 0 | 同 | 同 |
| 清空反馈微文案 | 1.2s 停留 + motion(0.8) 淡出 |
同(载体挂壳层伴随件父层——T3 代拍板③) | 同 |
3. 写路径逐行同构(旧 battle_stage_view.gd → 新)
on_step_row_fx(row):type!=""damage" 早退 / target=="hero"|""早退 /_card_by_name(target)空退 /flash_hit()+ killed→mark_dead()——逐行同构;_card_by_name内部实现由「子件_name_label.textcontains」改「本体display_name()contains」(语义等价,函数内部实现细节=§9 白名单)。set_enemies(cards_data):数量分叉(重建 vs 就地 set_data)结构逐行同构;重建侧由 StandeeView.new 改 StandeeBody.new+伴随件挂接(T3 代拍板①④)。clear_enemies()/gray_all_enemies()/set_round_text()/set_settle_focus():逐行同构(遍历对象 Control→本体)。- 弹道落点:
hero_standee_center()/enemy_standee_center()签名不变,实现 = 旧「本体 get_global_rect 中心」改world_to_shell(本体.position + box*0.5)——壳层口径保持(C4:结算演出 SettlementFxView 在 SubViewport 之外),返回值语义=站桩盒几何中心不变。 set_effects/set_effects_cleared_feedback/set_hero(投喂面):本体转发伴随件(slot_row),调用方零改造。
4. 已登记的结构性差异(非漂移,改判记录见台账 170/171)
- 站桩本体载体 Control→Node2D(本批目标本身);2. slot_row 伴随件挂壳层;3. enemy_box HBoxContainer→Control 伴随件容器;4. 血条呈现由引擎默认 ProgressBar 改世界直角矩形(色值近似平移——目检清单列「血条观感」项);5. ui_probe 敌站桩断言改本体探针出口(呈现口径逐字保持)。