iter53-卡1:卷轴视口批: 关卡画面视口化(level-map.md 布局决策5落地)——视口承载件/锚点跟随/平滑滚动减动效/拖拽滚轮平移与clamp/指引件/探针26断言/golden两Shot冻结

This commit is contained in:
DKChan committed 2026-11-06 00:08:18 +08:00
1 parent fd9c8ad90e
commit 55f4de3ca4
22 files changed
+983 -152

No files matched your search

+31
View File
@@ -5,6 +5,8 @@
# 缺位时先拷主区素材+导入边车再跑)。
# 模式:
# --menu:shot_probe 启动态菜单整屏帧 → game/tests/golden/menu_boot.png。
# --lmap:level_map_shot_probe 关卡视口两 Shot(入口停点+Boss 列锚定——2026-11-05 用户裁
# 两 Shot 面)→ game/tests/golden/<plat>/lmap_entry.png + lmap_boss.png。
# 全屏基线可行性前置已验证:菜单连续帧差 0.0000%/max_diff=0(光柱为
# 程序生成静态贴片、零动画着色器,全屏基线不抖动);采集确定性=探针隔离档(无断点+出厂
# 设置 1280×800),与 render_gate 的 shot_menu 对比段同源同帧。
@@ -21,6 +23,7 @@ MODE="board"
for a in "$@"; do
case "$a" in
--menu) MODE="menu" ;;
--lmap) MODE="lmap" ;;
*) if [ -z "$GAME" ]; then GAME="$a"; fi ;;
esac
done
@@ -53,6 +56,34 @@ if [ "$MODE" = "menu" ]; then
exit 0
fi
if [ "$MODE" = "lmap" ]; then
# 关卡视口两 Shot 面(卷轴视口批·2026-11-05 用户裁:只对拍关卡最开始与关卡 Boss 节点,
# 中间过程不对拍)——入口停点 + 末列 Boss 列锚定,两基线各存平台子目录。
for a in assets/fonts/ui_font_fusion_pixel_zh_hans.ttf \
assets/art/ui/button_stone.png \
assets/art/ui/node_battle.png assets/art/ui/node_reward.png \
assets/art/ui/node_rest.png assets/art/ui/node_boss.png \
assets/art/ui/node_shop.png; do
if [ ! -f "$GAME/$a" ]; then
echo "[golden_refresh] 拒跑 — 关卡屏素材缺位: ${a}(S3 停机点口径:基线禁锚字形回退态,先补素材+导入边车)"
exit 1
fi
done
gate_run_timeout 420 "$TMP/run.log" "$G" --path "$GAME_WIN" --quit-after 3000 res://probe/level_map_shot_probe.tscn -- "$TMP/shots"
st=$?
grep -E "\[level_map_shot_probe\]" "$TMP/run.log" | tail -3
# 判定锚工件(同 menu——quit-after 与 quit(0) 竞速的 124 非真红):PASS 签名 + 双图非零。
if ! grep -q "PASS — 两 Shot 落盘" "$TMP/run.log" || [ ! -s "$TMP/shots/lmap_entry.png" ] || [ ! -s "$TMP/shots/lmap_boss.png" ]; then
echo "[golden_refresh] FAIL — 关卡视口截图缺失或探针自检红(st=$st,见上)"
exit 1
fi
mkdir -p "$REPO/game/tests/golden/$PLAT"
cp "$TMP/shots/lmap_entry.png" "$REPO/game/tests/golden/$PLAT/lmap_entry.png" || exit 1
cp "$TMP/shots/lmap_boss.png" "$REPO/game/tests/golden/$PLAT/lmap_boss.png" || exit 1
echo "[golden_refresh] 完成 — 关卡视口两 Shot 基线已代入 game/tests/golden/$PLAT/(提交说明须写明触发原因)"
exit 0
fi
for a in assets/fonts/ui_font_fusion_pixel_zh_hans.ttf \
assets/art/board/seal_mark.png \
assets/art/character/character_hero_idle.png \
+6
View File
@@ -134,6 +134,12 @@ st=$?
grep -E "PASS|FAIL|问题" "$TMP/uip.log" | head -12
verdict "ui_input_probe" "$TMP/uip.log" "$st" || _rc=1
echo "======== level_map_viewport_probe(卷轴视口批 R1-R8) ========"
run_suite 120 "$TMP/lvp.log" res://probe/level_map_viewport_probe.tscn
st=$?
grep -E "PASS|FAIL" "$TMP/lvp.log" | head -12
verdict "level_map_viewport_probe" "$TMP/lvp.log" "$st" || _rc=1
echo "======== ui_struct_probe ========"
run_suite 120 "$TMP/stp.log" res://probe/ui_struct_probe.tscn
st=$?
+32
View File
@@ -165,6 +165,38 @@ else
fi
fi
echo "======== 关卡视口 golden 逐像素(卷轴视口批——两 Shot 面:入口停点+Boss 列锚定)========"
LM="$TMP/lmapshots"
gate_run_timeout 360 "$TMP/lm.log" "$G" --path "$GAME_WIN" --quit-after 3000 res://probe/level_map_shot_probe.tscn -- "$LM"
st=$?; kill_orphans
grep -E "\[level_map_shot_probe\]" "$TMP/lm.log" | tail -3
# 判定锚工件(同 fx/board——quit-after 竞速 124 非真红):PASS 签名 + 双图非零。
if ! grep -q "PASS — 两 Shot 落盘" "$TMP/lm.log"; then
echo "[render_gate] FAIL — level_map_shot_probe 未干净完成(exit=${st})"; _rc=1
fi
for b in lmap_entry.png lmap_boss.png; do
if [ ! -s "$LM/$b" ]; then echo "[render_gate] FAIL — 取证缺失/零字节: $b"; _rc=1; fi
done
scan_log "level_map_shot_probe" "$TMP/lm.log"
if [ "$_rc" -eq 0 ]; then
for b in lmap_entry.png lmap_boss.png; do
if [ ! -s "$GOLDEN/$b" ]; then
# 两 Shot 面(2026-11-05 用户裁)各平台独立冻结——本平台缺基线=未冻结态记 SKIP 不判红
#(windows 先锚;他平台冻结义务归收尾呈报),已锚平台照常逐像素严判
echo "[render_gate] SKIP — $GOLDEN/$b 基线缺失(本平台未冻结——跑 tools/golden_baseline_refresh.sh --lmap)"
else
LMG="$TMP/lmgolden"
mkdir -p "$LMG"
cp "$LM/$b" "$LMG/$b"
python3 tools/golden_compare.py "$REPO/game/tests/golden" "$LMG" "$b" | sed 's/^/[render_gate] /'
if [ "${PIPESTATUS[0]}" -ne 0 ]; then
echo "[render_gate] FAIL — 关卡视口 golden 超容差(S2 停机点口径:视口呈现换代=显式重制基线+呈报;超预期面=L3)"; _rc=1
fi
fi
done
fi
echo "======== 残留检查(批末闸) ========"
left="$(orphans | wc -l | tr -d ' ')"
total="$(gate_godot_count_all)"