diff --git a/game/tests/README.md b/game/tests/README.md index d03ccf0f..9308babd 100644 --- a/game/tests/README.md +++ b/game/tests/README.md @@ -159,6 +159,9 @@ tests/ | 营地大门两分支确认与断点续玩接线 | 营地交互流 | 大门命中区 → 合成鼠标事件经 `push_input` 真点(`ProbeUiUtil.push_click_at`)→ ConfirmDialog 真钮(三出口)→ `main._on_confirm_accepted()`(新冒险确认)/`main._resume_from_menu()`(断点续玩) | `ui_click_probe.gd:_ready`(大门两分支段/断点确认段——真输入 push_click 驱动,2026-11-05 真输入化);`presentation_encapsulation_sweep_test.gd:_init`(迭代52卡③组合根交接面结构性主证——pres封装 V1–V4 四组私取零命中+新公开面正锚,2026-11-05 补链锚) | | 四柜台拆解后五界面入口改挂与写口零回归 | 营地五界面 | 五界面意图信号 → `CampShopPresenter` → `MetaProgression.tree_buy()` 写口 | `forge_workbench_test.gd:_run`(承载类同迁断言十二项);`ui_click_probe.gd:_ready`(写口链段) | | 营地篝火回主菜单与笔记本改挂动线 | 营地交互流 | 笔记本命中区 → `CareerOverlay.open()`;篝火命中区 → ConfirmDialog 二次确认 → 主菜单 | `ui_struct_probe.gd:_ready`(career 段);`screen_flow_probe.gd:_ready`(篝火/开合段) | +| 关卡画面视口跟随 | 关卡画面(选路枢纽) | 停点切换与兑付回图经真实屏流程;读面 `LevelMapViewport.viewport_center_canvas_pos()` | `level_map_viewport_probe.gd:_probe_follow_anchor`;`level_map_viewport_probe.gd:_probe_smooth_scroll_reduced_motion` | +| 关卡画面视口平移 | 关卡画面(选路枢纽) | 合成拖拽沿与滚轮沿经 `push_input`(`ProbeUiUtil.push_drag_at`/`push_wheel_at`) | `level_map_viewport_probe.gd:_probe_drag_pan`;`level_map_viewport_probe.gd:_probe_wheel_pan`;`level_map_viewport_probe.gd:_probe_clamp_bounds`;`level_map_viewport_probe.gd:_probe_drag_no_submit` | +| 关卡画面视口指引 | 关卡画面(选路枢纽) | 深图 open_choices 真实停点 | `level_map_viewport_probe.gd:_probe_guidance_chrome` | | 营地图鉴占位挂起态与反参照结构纪律 | 营地场景视图 | 布告板命中区 → `CampSceneView._gui_input()`(object_pressed 信号) → 图鉴占位视图;营地根态场景树审计 | `ui_struct_probe.gd:_ready`(占位禁词/禁行段);`ui_struct_probe.gd:_ready`(结构禁词段) | | 营地刷新单口与场景根 HUD 同步 | 营地刷新总线 | 写口尾 → `CampRefreshBus.refresh()` → 现开界面刷新+场景根 HUD 刷新 | `ui_struct_probe.gd:_ready`(顶栏位段);`ui_click_probe.gd:_ready`(写口尾刷新段) | | Esc 浮窗唤起与三出口动线 | 营地 Esc 流 | 营地场景根态合成 Esc 键事件→ `main_esc_flow.on_esc_input()` → `ui.flow.open/close`;浮窗三钮 `pressed` → 三出口 | `screen_flow_probe.gd:_ready`(Esc 唤起/子界面开态不唤起/再按关窗/非营地不唤起段);`screen_flow_probe.gd:_ready`(返回动线/设置双路径段) | diff --git a/reports/需求卡片-卷轴视口批-2026-11-05.md b/reports/需求卡片-卷轴视口批-2026-11-05.md new file mode 100644 index 00000000..47c14619 --- /dev/null +++ b/reports/需求卡片-卷轴视口批-2026-11-05.md @@ -0,0 +1,140 @@ +# 需求卡片:卷轴视口批(关卡画面选路屏视口化) + +- 来源:[待办清单](../待办清单.md)「超预算图策略升级路径——等比缩放与滚动视口两案待裁」条(状态=文档设计已闭合+待写卡,2026-11-05 用户裁滚动视口案落地)。 +- **唯一事实源**:[level-map.md v2.0](../design/gdd/ux/level-map.md) §布局决策 5(行为四条表 :101–104+内嵌视口效果图 :108–153+像素级视觉判据 :154)+[关卡节点图生成.md v1.5](../design/gdd/systems/冒险循环/关卡节点图生成.md) §参数契约(图规模无呈现侧上限)。设计讨论四口子与效果图人审均 2026-11-05 用户裁决在案。 +- **验收档:中**(呈现交互面——玩家可见但不损持久状态;无存档写读、无结算公式、无 RNG 触碰;批卡 U0 时确认或改判)。 + +## 1. 目标与完成定义 + +关卡画面(选路屏)落卷轴视口范式:画布随图生长可超屏,屏为窗口——①视口锚点=当前节点居中;②停点切换与兑付回图平滑滚动跟随(减动效瞬切);③拖拽+滚轮手动平移(clamp 画布包络、拖拽不触发选路);④屏缘渐隐带+平移提示 chip 指引。 + +完成定义:验证闸对照表 R1–R9 全部有绿读数;场景探针家族扩展件当轮真实跑批通过;代码域闸全绿;用户实机目检「深度 13 图拖拽可达首末列、推进跟随方向感」登记不阻塞。 + +## 2. 现状事实(开工自行复核) + +- [level_map_screen.gd:26-32](../game/presentation/views/level_map_screen.gd) 冻结公式常量:`LAYER_BASE_X=70`/`LAYER_STEP_X=122`/`SLOT_BASE_Y=52`/`SLOT_STEP_Y=58`/`NODE_ICON_PX=20.0`/`NODE_HALF(36.5,25)`(52×36 的 1.4× 绘制)/`HIT_PAD=6.0`。 +- [level_map_screen.gd:66-69](../game/presentation/views/level_map_screen.gd) `_content_size(620,240)`、`_layout_cache`——`open_choices` 按图拟合画布尺寸。 +- [level_map_screen.gd:77-82](../game/presentation/views/level_map_screen.gd) 画布由 `CenterContainer`(`PRESET_FULL_RECT`)承载:整幅居中、无裁切无平移——超屏图(L3 层深 13,画布宽 1700.5px)两侧各 ~210px 出屏。 +- [level_gen_params.tres:41](../game/data/tables/level_gen_params.tres) L3 `layers=13`——深度 13 是现行定值,非极端情形。 +- [level_gen_params.gd:3-4、:69](../game/data/schemas/level_gen_params.gd) 头注「域校验沿关卡节点图生成.md v1.1 调参表已锁条款」「域并单点(关卡节点图生成.md v1.4 调参表)」——owner 文档已 v1.5 换代参数契约节,指针失效待反转(本卡 T4 随动)。 +- [ui_kit.gd:231-232](../game/presentation/views/ui_kit.gd) `UiKit.motion(dur)` 呈现层 tween 时长单点包装(减动效面)。 +- [ui_struct_probe.gd:204](../game/probe/ui_struct_probe.gd) `_audit("level_map", ...)` 既有结构审计锚;[golden/README.md:8](../game/tests/golden/README.md) level_map 全屏 golden=历史留根、现行闸件未对拍(本批不触渲染闸对拍)。 +- 全文件 662 行——超 code-conventions §1.1 的 ~400 行审视线,视口承载拆件有据。 + +## 3. 设计契约(违反=L3 停机呈报) + +- 🔴 **冻结值零改动**:节点图标 20px 烘焙 1:1、通道折线 2/3/4px、画布公式(宽=70+层深×122+44.5、高=52+槽位×58+25+24、下限 620×256)、节点方块 52×36×1.4 绘制、编号 10px——视口批只加行为,不动任何像素冻结件(level-map.md:69、:154)。 +- 🔴 **视口纯呈现态**:平移位置零核心写、不进存档(重进本屏按锚点规则重新定位);Core 层零触碰、RNG 零触碰(level-map.md:103 行、:107 视口为纯呈现态句)。 +- 🔴 **选路唯一通道**:图上点击提交语义零改动;拖拽超阈值不得触发选路提交(level-map.md:103)。 +- 🔴 **零自动推进**:视口跟随只随停点切换/兑付回图发生,不构成任何自动前进路径(level-map.md:141 零自动推进纪律不变)。 +- 🔴 **拆分边界纪律**(code-conventions §1.1,2026-10-28 用户裁):每个拆出单元有可陈述职责语句与单一变化原因;拆出单元有集体身份;「过阈值」只作发现信号;拆不出内聚单元=停卡走豁免通道,禁硬拆凑绿。 +- 🔴 **禁为机检文本保留无效成员**(code-conventions §1.1⑤):机检键与卡片契约互斥=停卡呈报,禁自造第三条路。 + +## 4. 范围边界 + +做:视口承载件、锚点跟随、平滑滚动、减动效瞬切、拖拽/滚轮平移、clamp、渐隐带与提示 chip、探针断言、schema 头注指针反转。 +不做:缩放与缩略图(等比缩放案已否决)、其余视口暗示形态(边缘回弹等——布局决策 5 注后置)、顶栏/底栏/放弃按钮/覆盖层改动、生成器与参数表改动、键盘/手柄输入(排 Beta)。 + +## 5. 关联文档同步面 + +| 文档 | 关联点 | 同步义务 | +|---|---|---| +| [level-map.md](../design/gdd/ux/level-map.md) v2.0 | 布局决策 5 行为实现与 AC :260–271——实现若发现 spec 缺口 | 设计权威——实现批禁写,缺口逐条列反哺点清单由文档批落 | +| [game/tests/README.md](../game/tests/README.md) 能力清单 | 本卡新增能力行三行(写卡段已同批落表,见 §8 能力行列) | 机械面——实现批禁写;批末收尾核对表上名与落地一致(改名则回表) | +| [level_gen_params.gd](../game/data/schemas/level_gen_params.gd) | 头注 :3-4/:69 指针失效(owner 已 v1.5 参数契约) | 本卡 T4 随批反转指针(非行为改动——`game/` 内实现批可写面) | +| [关卡节点图生成.md](../design/gdd/systems/冒险循环/关卡节点图生成.md) v1.5 | 无——本批实现不改变其任何陈述 | 无同步义务 | + +## 6. 文件结构图(行为改动→对照表行互指) + +| 文件 | 职责 | 改动性质 | +|---|---|---| +| `game/presentation/views/level_map_viewport.gd` | 新增——卷轴视口承载件:画布宿主与裁切、平移状态与 clamp、锚点跟随、平滑滚动、指引件(拖拽/滚轮判定留画布 `_gui_input`——事件流同源) | 行为改动(R2–R8)·新增 | +| `game/presentation/views/level_map_screen.gd` | 修改——CenterContainer 承载换视口件;停点切换/回图接线 `reanchor()`;`_content_size` 拟合后调 `reanchor(false)` 首锚 | 行为改动(R1+R2/R3 随动)·复用既有文件 | +| `game/data/schemas/level_gen_params.gd` | 修改——头注指针反转(owner 单点改为本文件域校验+参数契约指针) | 非行为改动(R9)·复用既有文件 | +| `game/probe/level_map_viewport_probe.gd` + `.tscn` | 新增——视口行为场景探针(真输入驱动) | 行为改动(R2–R8 验收载体)·新增 | +| `game/probe/probe_ui_util.gd` | 修改——新增拖拽沿与滚轮沿真输入合成工具 `push_drag_at`/`push_wheel_at`(沿 `push_click_at` :717-733 同式;探针共用面唯一落点) | 非行为改动(探针侧工具)·复用既有文件 | + +## 7. 任务卡 T0..T4 + +### T0 读数与基线(0.5 工作日) +- [ ] 核对 `tools/gdstyle_baseline.txt` 有无 `level_map_screen` 相关 S13 键;有则记录登记值(改后只降不升),无则记「无键、按工具默认」 +- [ ] 跑场景探针现状读数:`…console.exe --headless --path . res://probe/ui_struct_probe.tscn`(level_map 审计段绿)+ `res://probe/screen_flow_probe.tscn`——读数记入本步提交信息 +- [ ] 跑冒烟 `python tools/run_smoke.py`——基线读数在案 + +### T1 视口承载件与手动平移(1–1.5 工作日) +- [ ] 新增 `level_map_viewport.gd`(接口块见 §10):`setup(canvas, anchor_provider, viewport_size)`、`pan_by(delta)`、`viewport_center_canvas_pos() -> Vector2`、`is_clamped_at_edge() -> bool`;`clip_contents=true`;成员 ≤8 +- [ ] `level_map_screen.gd` 承载改造:CenterContainer 换视口件实例;`open_choices` 拟合后调 `reanchor(false)` 首锚(入口停点锚入口组、其余锚当前节点——`anchor_provider` 由 screen 提供画布坐标) +- [ ] 拖拽/滚轮判定落**画布既有 `_gui_input`**(画布已持有鼠标事件流——悬停/选路同源,禁在视口件层做父子事件路由竞争;视口件只管裁切/offset/clamp/跟随):拖动距离阈值(provisional 8px)判定,超阈值进拖拽态逐帧调 `viewport.pan_by()`;滚轮横滚映射 `pan_by`(代拍板:滚轮下=向右/前进向) +- [ ] clamp:`pan_by` 后 offset 收敛在画布包络内(`viewport_center_canvas_pos()` 画布坐标恒在 `[half_view, canvas_size-half_view]` 夹紧域;**画布小于视口=居中分支**——夹紧域退化为居中定位);探针宿主沿 ui_struct_probe :204 同款(组合根真实屏 `main.ui.modals.run.level_screen`),禁合成投喂替代真实路径 +- [ ] 探针 `level_map_viewport_probe.gd`:断言 R3(拖拽移视口)、R4(滚轮移视口)、R5(clamp 边界)、R6(拖拽不触发选路——`route_chosen` 零发射);真实入口=probe_ui_util 合成沿走 `push_input` + +### T2 锚点跟随与平滑滚动(0.5–1 工作日) +- [ ] `reanchor(smooth)`:目标 offset=锚点画布坐标−视口半宽(居中);`smooth=true` 走单段缓动 tween 时长 `UiKit.motion(0.3)`(provisional);`smooth=false` 即达;重入先杀在飞 tween 再建新(快速连续停点切换防叠加) +- [ ] 减动效:`UiKit.motion` 通道既有减动效语义下滚动跳终态——探针断言 R7(减动效开=位置即达,无 tween 中间帧) +- [ ] level_map_screen.gd 停点切换与兑付回图路径接 `reanchor(true)`——入口停点锚入口节点组(多入口取组包围盒居中) +- [ ] 探针断言 R2(停点切换后当前节点画布坐标投影=视口中线 x=640±2) + +### T3 指引件(0.5 工作日) +- [ ] 视口件内渐隐带:屏缘左右各 70px 渐变(色取屏底同族——代拍板渐变 stops);浅图画布不超屏时渐隐带隐藏(无暗示必要) +- [ ] 平移提示 chip:240×30 圆角 6、深底石灰描边、文案「◄ 拖拽画布 / 滚轮平移 ►」14px;图区底部居中(level-map.md:104) +- [ ] 探针断言 R8(渐隐带与 chip 可见性+几何判据——像素级判据②③,level-map.md:154) + +### T4 指针反转与收口(0.5 工作日) +- [ ] `level_gen_params.gd` 头注 :3-4/:69 反转:「取值域与字段契约单点=本文件域校验;概念与设计意图=关卡节点图生成.md v1.5 参数契约节」(非行为改动——grep 判据 R9) +- [ ] 全探针最窄回归:ui_struct_probe level_map 段+screen_flow_probe 复跑绿(波内修复只做出红最小单元的最窄确认) +- [ ] 产出物落位:`reports/iter-实现报告-<日期>.md`(各卡状态+实机目检总清单+实现决定记录)+ `reports/iter-反哺点-<日期>.md`(同步面所列逐条落点)——轻闸全绿后、合并前写齐 + +估时合计:3–4.5 工作日(中值 3.5)。 + +## 8. 验证闸(改动—验收对照表) + +| 需求点 | 改动(文件:行/行为) | 验收测试(名称+落点+尾缀) | 层级 | 真实入口 | 判据绑定面 | 能力行 | +|---|---|---|---|---|---|---| +| R1 浅图整幅居中无裁切+画布入视口件承载(锚 design/gdd/ux/level-map.md:260) | level_map_screen.gd(CenterContainer→viewport 件) | `level_map_viewport_probe.gd:_probe_shallow_no_crop`〔卷轴批 V1〕 | 探针 | 场景探针实例化本屏+open_choices 真实停点 | 画布尺寸≤视口时居中分支 offset 定位、无裁切 | 新增:关卡画面视口跟随 | +| R2 视口锚点:停点切换/回图后当前节点居中 x=640±2(锚 design/gdd/ux/level-map.md:101、:269) | level_map_viewport.gd `reanchor`+screen 接线 | `level_map_viewport_probe.gd:_probe_follow_anchor`〔卷轴批 V2〕 | 探针 | 合成推进停点切换经真实屏流程 | 当前节点画布坐标经 `viewport_center_canvas_pos()` 投影=640±2 | 新增:关卡画面视口跟随 | +| R3 拖拽平移移动视口(锚 design/gdd/ux/level-map.md:103) | 画布 `_gui_input`(level_map_screen.gd)拖拽态调 `pan_by` | `level_map_viewport_probe.gd:_probe_drag_pan`〔卷轴批 V3〕 | 探针 | `ProbeUiUtil.push_drag_at` 拖拽沿走 `push_input` | `_offset` 位移量=拖拽位移(clamp 前) | 新增:关卡画面视口平移 | +| R4 滚轮横滚移动视口(锚 design/gdd/ux/level-map.md:103) | 画布 `_gui_input` wheel 分支调 `pan_by` | `level_map_viewport_probe.gd:_probe_wheel_pan`〔卷轴批 V4〕 | 探针 | `ProbeUiUtil.push_wheel_at` 合成滚轮沿走 `push_input` | `_offset` 位移=滚轮步进映射 | 新增:关卡画面视口平移 | +| R5 clamp 边界与首末列可达:不出露屏底空档、拖拽两极首列与末列(含 Boss)入屏(锚 design/gdd/ux/level-map.md:103、:260) | `pan_by` 收敛逻辑+包络两极 | `level_map_viewport_probe.gd:_probe_clamp_bounds`〔卷轴批 V5〕 | 探针 | 极端拖拽沿(超包络、两极到边) | `viewport_center_canvas_pos()` 恒在夹紧域;浅图居中分支;`is_clamped_at_edge()` 翻转;两极时深度 0 与深度 13 列中心入视口 | 新增:关卡画面视口平移 | +| R6 拖拽不触发选路提交(锚 design/gdd/ux/level-map.md:103) | 画布 `_gui_input` 阈值判定(provisional 8px) | `level_map_viewport_probe.gd:_probe_drag_no_submit`〔卷轴批 V6〕 | 探针 | 拖拽沿起止于候选节点上方 | `route_chosen` 零发射+屏幕未关 | 新增:关卡画面视口平移 | +| R7 平滑滚动与减动效瞬切(锚 design/gdd/ux/level-map.md:102、:188、:227) | `UiKit.motion(0.3)` tween/减动效跳终态 | `level_map_viewport_probe.gd:_probe_smooth_scroll_reduced_motion`〔卷轴批 V7〕 | 探针 | 停点切换+设置面减动效置位 | smooth=true 有 tween 中间帧;减动效开=位置即达 | 新增:关卡画面视口跟随 | +| R8 指引件:渐隐带 70px+chip 240×30 呈现(锚 design/gdd/ux/level-map.md:104、:154) | 视口件指引子件 | `level_map_viewport_probe.gd:_probe_guidance_chrome`〔卷轴批 V8〕 | 探针 | 深图 open_choices 真实停点 | 像素级判据②③(level-map.md:154)——可见性+几何 | 新增:关卡画面视口指引 | + +非行为改动行:schema 头注指针反转(level_gen_params.gd:3-4/:69)——判据=全仓无「域并单点=调参表」残留、头注含「参数契约节」指向(锚 design/gdd/systems/冒险循环/关卡节点图生成.md:109);由 §6 文件结构图该行覆盖,T4 落步,实现报告对照表列非行为改动行。 +锚行核对义务:开工时行号以当版文件为准(本卡锚基于 v2.0/v1.5 抄录)。 + +- 测试方式两分法:R1–R8 全走探针自动化(调试注入不适用——本卡零数据面改动,状态经真实停点与真实输入驱动);用户目检项=「深度 13 图拖拽可达首末列、跟随方向感、chip 不碍选路」登记进实现报告实机目检总清单(登记不阻塞)。 +- 回归措辞:里程碑步(T 段)出口跑一次场景探针族全套;波内修复只做出红最小单元的最窄确认;新增探针先行孤立验证再并入全套。 +- 测试削弱申报:无删旧断言申报;ui_struct_probe level_map 段既有审计判据不改——承载改造若触其结构断言面,适配性调整须在实现报告申报并保持判据语义。 +- 独立验收审计:`reports/iter-验收审计-<日期>.md`,由未参与实现的会话执行;本卡验收档=中,审计深度按 test-conventions §8.7 中档执行(对照表逐行全量、判据绑定面抽查、削弱检查逐处、直查例外逐条、最窄复跑以远端 CI 现查读数代证)。 + +## 9. 异常分级 + +- L1 自救:探针断言红→改后只跑出红探针的最小单元;闸红只跑红件。 +- L2 记录继续:画布 `_gui_input` 内拖拽态与悬停/选路命中分支次序的调整、渐变/chip 视觉微调(provisional 区间内)、S13 读数波动在只降不升约束内的消化。 +- L3 停机写报告等用户:触碰 §3 任一 🔴;S13 键上升且无法只降;拆不出内聚单元;机检预算互斥=上游缺陷停卡退回写卡段;拖拽误触选路提交且路由层面消不掉。 + +## 10. 落位与可复用性预检 + +- **level_map_viewport.gd(新增)**:不复用 `ScrollContainer`——其滚动条 UI、焦点/滚动语义与本屏「纯鼠标、无滚动条、锚点居中跟随」冲突,且平滑滚动与 clamp 语义仍需全自管;承载裁切用 Control `clip_contents`(引擎内建,项目已有 clip 先例)。唯一面:视口 offset 状态只落本件(screen 的 `_layout_cache` 仍管布局、不管视口);全仓 grep 无第二处视口/平移逻辑。分层:呈现层内部子件——构造注入(canvas/anchor_provider/viewport_size 一次交齐,code-conventions §1.6 拆分交接);读核心只读面经 screen 既有出口,零新增核心触点。 +- **probe_ui_util.gd 增补(复用既有文件)**:`push_drag_at`/`push_wheel_at` 落探针共用面唯一落点——禁另起工具文件散落;`push_click_at`(ui_input_probe :717-733 同式)点击沿同式扩展。 +- **指引件(渐隐带/chip)**:随视口件承载(同职责:视口呈现行为);不立独立文件——拆出「命不出名字的打包」即凑计数袋。 +- **level_gen_params.gd 头注反转(复用既有文件)**:注释单行改动,无新增件。 + +## 11. 实现规范预算 + +- **新增 level_map_viewport.gd 三查**:①接口块公开方法 4(setup/pan_by/viewport_center_canvas_pos/is_clamped_at_edge)≤20 ✓;②成员变量 ≤8(_canvas/_anchor_provider/_viewport_size/_offset/_tween/_drag_active/_drag_accum/_guided_visible)≤15 ✓;③无迁移函数(新件零存量函数迁入——screen 侧只是接线改造,hover/命中逻辑零迁移)。 +- **存量触面**:level_map_screen.gd——T0 记 S13 键基线;本批改动为承载替换与 reanchor 接线,预期键值持平或只降;达成手段=T4 复跑 S13 对账。 +- 指标例外:无申报。 + +## 12. 代拍板白名单 + +1. 画布 `_gui_input` 内拖拽态与悬停/选路命中的事件分支次序(红线=R6 判据不破)。 +2. 拖拽距离阈值具体值(8px 附近 provisional 区间内定值)。 +3. 平滑滚动缓动曲线类型(单段缓动家族内选型)。 +4. 渐隐带渐变 stops 与 chip 深底/描边色值(art-bible §4.1 冻结色板同族取值)。 +5. 滚轮方向映射(下=向右/前进向)。 +超清单决定记入实现报告「实现决定记录」节。 + +## 13. 待裁点 + +零待裁点,开工门=U0(四口子与效果图 2026-11-05 用户已裁决;验收档「中」随批卡确认)。 diff --git a/待办清单.md b/待办清单.md index 7da31879..eb111842 100644 --- a/待办清单.md +++ b/待办清单.md @@ -22,12 +22,12 @@ #### 超预算图策略升级路径——等比缩放与滚动视口两案待裁(2026-10-24 登记,来源=批次移交) -**实况**:2026-11-05 用户裁滚动视口案落地(等比缩放案否决——像素纪律):关卡画面卷轴视口,跟随+拖拽+滚轮、平滑滚动(减动效瞬切)、当前节点居中锚;「图包络 ≤ 屏预算」约束退役,画布随图生长、规模归参数档。设计闭合凭据:design/gdd/ux/level-map.md v2.0(布局决策 5+视口效果图内嵌,2026-11-05 人审通过);design/gdd/systems/冒险循环/关卡节点图生成.md v1.5(参数契约节+图规模无呈现侧上限句)。 -- 相关文档:关卡节点图参数取值域已归数据 schema 层;schema 头注「域并单点=调参表」指针反转随实现批顺带(卡片随动项)。 +**实况**:2026-11-05 用户裁滚动视口案落地(等比缩放案否决——像素纪律):关卡画面卷轴视口,跟随+拖拽+滚轮、平滑滚动(减动效瞬切)、当前节点居中锚;「图包络 ≤ 屏预算」约束退役,画布随图生长、规模归参数档。设计闭合凭据:design/gdd/ux/level-map.md v2.0(布局决策 5+视口效果图内嵌,2026-11-05 人审通过);design/gdd/systems/冒险循环/关卡节点图生成.md v1.5(参数契约节+图规模无呈现侧上限句)。需求卡片=reports/需求卡片-卷轴视口批-2026-11-05.md(grilling 复核裁决全落,验收档中)。 +- 相关文档:关卡节点图参数取值域已归数据 schema 层;schema 头注「域并单点=调参表」指针反转随实现批顺带(卡片随动项);需求卡片 reports/需求卡片-卷轴视口批-2026-11-05.md(grilling 复核裁决全落,验收档中)。 **改动面**:文档 -**状态**:文档设计已闭合+待写卡 +**状态**:文档设计已闭合+已写卡 #### UI 贴图重构批——元进度件仍是程序化占位(2026-10-13 登记,来源=审计发现)