From ac43e1333dc3ea5cc15e9aab092a65789285c9bb Mon Sep 17 00:00:00 2001 From: DKChan <524912269@qq.com> Date: Tue, 29 Sep 2026 04:02:59 +0800 Subject: [PATCH] =?UTF-8?q?feat(t2):=20=E6=95=8C=E7=A7=8D=E7=AB=8B?= =?UTF-8?q?=E7=BB=98=E8=90=BD=E4=BD=8D=E2=80=94=E2=80=94=E5=85=AB=E5=BC=A0?= =?UTF-8?q?=E7=9C=9F=E5=9B=BE=E6=9C=8D=E5=BD=B9+=E5=AD=97=E5=BD=A2?= =?UTF-8?q?=E5=9B=9E=E9=80=80=E9=80=80=E5=BD=B9=E4=B8=BA=E7=BA=AF=E7=BC=BA?= =?UTF-8?q?=E4=BD=8D=E5=85=9C=E5=BA=95+=E7=AB=99=E6=A1=A9=E7=BA=B9?= =?UTF-8?q?=E7=90=86=E9=9D=9E=E7=A9=BA=E6=96=AD=E8=A8=80=20=E2=91=A0?= =?UTF-8?q?=E5=85=AB=E5=BC=A0=20character=5Fenemy=5F<=E9=94=AE>.png=20?= =?UTF-8?q?=E6=9C=8D=E5=BD=B9=EF=BC=88T1=20=E4=BA=A7=E7=89=A9=E5=8E=9F?= =?UTF-8?q?=E4=BD=8D=3Dui=5Fkit=20=E5=B8=B8=E9=87=8F=E5=90=8D,worktree=20?= =?UTF-8?q?=E6=9C=AC=E5=9C=B0=E4=B8=8D=E5=85=A5=20git=EF=BC=89;=E6=9C=9D?= =?UTF-8?q?=E5=90=91=E6=A0=B8=E8=AF=81=3D=E5=85=AB=E6=95=8C=E5=83=8F?= =?UTF-8?q?=E7=B4=A0=E6=BA=90=E6=9C=9D=E5=B7=A6/=E6=AD=A3=E9=9D=A2,flip=3D?= =?UTF-8?q?false=20=E5=91=88=E7=8E=B0=E6=9C=9D=E4=B8=BB=E8=A7=92=E2=80=94?= =?UTF-8?q?=E2=80=94battle=5Fstage=5Fview=20=E6=97=A7=E6=B3=A8=E8=AE=B0?= =?UTF-8?q?=E3=80=8C=E5=9F=BA=E5=87=86=E6=9C=9D=E5=8F=B3=E3=80=8D=E6=8E=AA?= =?UTF-8?q?=E8=BE=9E=E5=A4=B1=E7=9C=9F=E9=9A=8F=E6=89=8B=E4=BF=AE=20?= =?UTF-8?q?=E2=91=A1standee=5Fbody.=5Fportrait=5Fglyph=20=E4=B8=89?= =?UTF-8?q?=E6=A1=A3=E4=BD=93=E9=87=8F=E5=AD=97=E5=BD=A2(=E2=96=82/?= =?UTF-8?q?=E2=96=86/=E2=96=88)=E9=80=80=E5=BD=B9,=E4=BF=9D=E7=95=99=20?= =?UTF-8?q?=E4=BA=BA/=E2=9C=95/=E6=95=8C=20=E7=BA=AF=E7=BC=BA=E4=BD=8D?= =?UTF-8?q?=E5=85=9C=E5=BA=95(C7=20=E5=9B=9E=E9=80=80=E9=93=BE=E4=BF=9D?= =?UTF-8?q?=E6=8C=81);=E7=9B=B8=E5=AF=B9=E4=BD=93=E9=87=8F=E8=AF=AD?= =?UTF-8?q?=E4=B9=89=E7=94=B1=2048px=20=E6=A1=A3=E7=BB=9F=E4=B8=80?= =?UTF-8?q?=E6=AF=94=E4=BE=8B=E6=89=BF=E8=BD=BD;=E6=96=B0=E5=A2=9E=20portr?= =?UTF-8?q?ait=5Fprobe()=20=E6=8E=A2=E9=92=88=E5=87=BA=E5=8F=A3=20?= =?UTF-8?q?=E2=91=A2ui=5Fprobe=20=E6=89=A9=E4=B8=A4=E6=96=AD=E8=A8=80(?= =?UTF-8?q?=E5=8F=AA=E5=A2=9E):=E6=95=8C=E7=AB=99=E6=A1=A9+=E4=B8=BB?= =?UTF-8?q?=E8=A7=92=E7=AB=99=E6=A1=A9=20portrait=5Fprobe().has=5Ftex=20?= =?UTF-8?q?=E5=85=A8=E7=9C=9F=20=E8=BD=BB=E9=97=B8=3D=E5=86=92=E7=83=9F=20?= =?UTF-8?q?576/0+=E4=B8=89=E6=8E=A2=E9=92=88=20PASS(=E6=96=B0=20png=20--ed?= =?UTF-8?q?itor=20--quit=20=E5=88=B7=E5=AF=BC=E5=85=A5=E7=BC=93=E5=AD=98?= =?UTF-8?q?=E5=90=8E=E8=BF=87)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- game/presentation/views/battle_stage_view.gd | 3 ++- game/presentation/views/standee_body.gd | 17 ++++++++--------- game/smoke/ui_probe.gd | 5 +++++ 3 files changed, 15 insertions(+), 10 deletions(-) diff --git a/game/presentation/views/battle_stage_view.gd b/game/presentation/views/battle_stage_view.gd index 3fec96ec..c2111474 100644 --- a/game/presentation/views/battle_stage_view.gd +++ b/game/presentation/views/battle_stage_view.gd @@ -248,7 +248,8 @@ func set_enemies(cards_data: Array) -> void: world.add_child(body) body.slot_row = _make_slot_companion(enemy_box) body.set_data(d) - # 敌种立绘接线(仅重建拍装载一次;flip=false——敌像素材基准朝右,翻转义务归素材批) + # 敌种立绘接线(仅重建拍装载一次;flip=false——八敌像素源核证朝左/正面(迭代 6 T1), + # 呈现即朝主角无误;反向朝向源换代时翻转义务归素材批) body.set_portrait_texture(_enemy_portrait_tex(String(d.get("enemy_id", ""))), false) _cards.append(body) _sync_layout.call_deferred() diff --git a/game/presentation/views/standee_body.gd b/game/presentation/views/standee_body.gd index a661e301..7412cdb0 100644 --- a/game/presentation/views/standee_body.gd +++ b/game/presentation/views/standee_body.gd @@ -311,19 +311,18 @@ func _refresh_portrait_glyph() -> void: func _portrait_glyph() -> String: + # 字形回退已退役为纯缺位兜底(迭代 6 T2——八敌真图落位;旧三档体量字形 ▂/▆/█ 随退役, + # 相对体量语义由 48px 档统一比例承载)。缺位态:主角「人」/死亡「✕」/其余「敌」。 if _kind == "hero": return "人" if _dead: return "✕" - match _enemy_id: - "goblin": - return "▂" # 小体量墩形 - "bugbear": - return "▆" # 垂直延伸体量 - "ogre_chief": - return "█" # 最大体量 - _: - return "敌" + return "敌" + + +# 立绘落位探针出口(迭代 6 T2——站桩纹理非空断言面;缺位回退链保持的对照面) +func portrait_probe() -> Dictionary: + return {"has_tex": _portrait_sprite != null and _portrait_sprite.texture != null} func _portrait_color() -> Color: diff --git a/game/smoke/ui_probe.gd b/game/smoke/ui_probe.gd index 912de2d9..da82e2cb 100644 --- a/game/smoke/ui_probe.gd +++ b/game/smoke/ui_probe.gd @@ -133,8 +133,13 @@ func _ready() -> void: standee.set_pending("basic", "") if bool(standee.intent_probe().visible): problems.append("普攻应零表示(意图指示应隐藏)") + # 站桩纹理非空断言(迭代 6 T2——八敌真图落位;缺位回退链保持的对照面) + if not bool(standee.portrait_probe().get("has_tex", false)): + problems.append("敌立绘纹理未落位(素材管线 48px 档——迭代 6 T2;缺位回退链不应在此态触发)") if main.stage.hero_standee == null or not main.stage.hero_standee.has_world_hp_bar: problems.append("B 区主角站桩缺失(世界血条面缺失)") + elif not bool(main.stage.hero_standee.portrait_probe().get("has_tex", false)): + problems.append("主角立绘纹理未落位(48px 档——迭代 6 T2/T3)") # ---- BUG-0001 回归(tooltip 入树后 set_effects 槽位不错位——结算软锁修复沉淀)---- var slots_row = main.stage.hero_standee.slot_row # BUG-0001 回归随组件迁入站桩(tooltip/槽位错位同源) var probe_eff: Array = [{"effect_id": "attack_up", "display_name": "增伤", "layers": 1,