feat: accessibility settings, subtitle/QTE improvements, docs update
This commit is contained in:
71
ROADMAP.md
71
ROADMAP.md
@@ -856,9 +856,76 @@ QTE 成功 / 到达隐藏结局 / 通关等"事件型"成就,通过在对应 e
|
||||
- [x] 验证:TypeScript + Vite build 通过
|
||||
- [ ] 未来:Dagre 关键节点时间线图(`SceneNode.keyMoment?: boolean`)
|
||||
|
||||
### P16 平台化 — 云存档 + 可访问性 + 自适应码率 + 全局统计(待实现)
|
||||
<!--
|
||||
### P16 自适应码率 — HLS/DASH 流媒体支持(已废弃,移入 FUTURE.md)
|
||||
|
||||
目标:面向分发和用户多样性的补全功能。含原 P15 + 原 P13d 全局统计。
|
||||
离线应用模式下视频文件本地存储,无网络波动和缓冲需求。HLS/DASH 在离线场景完全多余。
|
||||
|
||||
- [x] ~~engine/core/VideoManager.ts~~
|
||||
- [x] ~~package.json hls.js~~
|
||||
- [x] ~~验证~~
|
||||
|
||||
-->
|
||||
|
||||
### P16 可访问性设置 — 字幕 + QTE 辅助 + 防误触 + 暂停 ✅ 已完成 2026-06-09
|
||||
|
||||
目标:让不同身体条件的玩家都能舒适游戏。保留 6 个高价值设置和交互改进。
|
||||
|
||||
**设置项:**
|
||||
|
||||
| 设置 | 默认 | 说明 |
|
||||
|------|------|------|
|
||||
| 字幕字号 | 20px | 20/24/28/32px 可选,全局统一,所有场景生效 |
|
||||
| 字幕背景透明度 | 0 | 0/0.3/0.5/0.7/0.9 可选,0=无背景(电影字幕风格) |
|
||||
| QTE 时限放宽 | 关 | 开启后所有 QTE 时限 × 1.5 |
|
||||
| QTE 按键简化 | 关 | 开启后所有 QTE 映射为空格键 |
|
||||
| 防误触延迟 | 开 | 选项出现后 0.5 秒内不接受点击/按键确认,防止连续按跳过误选 |
|
||||
| 可暂停 | 开 | Space 键暂停/恢复,画面冻结 + 半透明遮罩。非 ESC 菜单式覆盖 |
|
||||
|
||||
**入口:** 主菜单"设置"按钮 + 游戏内 ESC 菜单"设置"按钮,两处均可进入。
|
||||
|
||||
设置项存 localStorage,QTE 参数通过 Engine API 传入 QTESystem。暂停为引擎级功能。
|
||||
|
||||
**实现清单:**
|
||||
|
||||
- [x] `src/stores/gameStore.ts` — 6 个设置项状态 + localStorage 读写
|
||||
- [x] `src/components/AccessibilitySettings.vue` — 设置面板 UI(下拉 + 开关 + 滑块)
|
||||
- [x] `src/components/Subtitles.vue` — `:style` 绑定 `store.subFontSize` / `store.subBgAlpha`
|
||||
- [x] `src/components/ChoicePanel.vue` — 防误触延迟(选项出现后 0.5s `pointer-events: none`)
|
||||
- [x] `engine/systems/QTESystem.ts` — `timeLimitMultiplier` 和 `singleKeyMode` 参数
|
||||
- [x] `src/App.vue` — 主菜单 + 游戏内"设置"按钮;Space 暂停/恢复带遮罩;QTE 参数传入引擎
|
||||
- [x] 验证:TypeScript + Vite build 通过
|
||||
|
||||
### P17 全局统计 + 主菜单 — 通关数据展示 + 统一入口(待实现)
|
||||
|
||||
目标:通关后展示统计数据(线索数、结局数、QTE 成功/失败次数),所有入口整合到统一主菜单。
|
||||
|
||||
**全局统计数据定义:**
|
||||
|
||||
```json
|
||||
{
|
||||
"stats": [
|
||||
{ "id": "clues_found", "label": "线索发现数", "variable": "investigation", "icon": "🔍" },
|
||||
{ "id": "qte_wins", "label": "QTE 成功次数", "variable": "qte_succeeded", "icon": "🎯" },
|
||||
{ "id": "endings_count", "label": "达成结局数", "type": "endings", "icon": "🏁" }
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
数据从 `StateManager.variables` 读取。`type: "endings"` 的统计项从 `visitedSceneIds ∩ endings[].sceneId` 计算。
|
||||
|
||||
**主菜单界面:**
|
||||
|
||||
统一入口组件 `MainMenu.vue`,整合:新游戏 / 继续 / 章节选择 / 成就 / 画廊 / 设置 / 语言切换。
|
||||
|
||||
**实现清单:**
|
||||
|
||||
- [ ] `engine/types.ts` — `GameData.stats: StatDef[]`
|
||||
- [ ] `src/components/MainMenu.vue` — 主菜单统一入口,所有按钮整齐排列
|
||||
- [ ] `src/components/StatsPanel.vue` — 通关后统计面板
|
||||
- [ ] `src/App.vue` — 游戏结束后展示 StatsPanel;主菜单用 MainMenu 替代当前散装按钮
|
||||
- [ ] `public/scenes/demo.json` — `stats` 定义
|
||||
- [ ] 验证:主菜单入口完整、通关后统计数据正确、统计刷新后仍然准确
|
||||
|
||||
## 依赖清单
|
||||
|
||||
|
||||
Reference in New Issue
Block a user