# 远期功能扩展笔记 以下功能在讨论中出现但暂不纳入实施计划,后续需要扩展时参考。 ## 代码清理 - **移除 flag 机制** — `StateManager.flags` / `hasFlag` / `setFlag` / `clearFlag` 全部移除; `Condition.op: 'hasFlag'` 和 `Effect.type: 'toggleFlag'` 删除; 统一用 `variable == 1` / `set: variable, value: 1` 替代; SaveSystem 存档移除 `flags` 字段;P8 不再需要 `defaultFlags` 变量机制完全能覆盖 flag 功能,flag 是早期过度设计 ## P7 全屏模式 - 扩展 - **自动进入全屏** — 点击"开始游戏"时同步 `requestFullscreen()`,利用用户手势 - **UI 自动隐藏** — 播放中 3 秒无鼠标移动自动隐藏菜单按钮和光标(`pointer-events: none`),鼠标移动恢复 - **Pointer Lock** — `requestPointerLock()` 锁定鼠标,防移出窗口,配合热区点击和 QTE - **移动端适配** — iOS Safari `webkitEnterFullscreen`,Android Chrome 视口适配 ## P8 章节选择 - 扩展 - 章节缩略图懒加载 - 章节解锁动画 - 按进度百分比展示章节完成度 ## P9 跳过/倍速 - 扩展 - 智能跳过(仅跳过"对话"部分,保留"动作"部分) - 快捷键自定义 - 2x/4x/8x 多档位 ## P10b 手柄导航 — 远期(Gamepad API) 以下功能在 P10a 键盘导航完成后,作为手柄支持的第二期实现: ### 手柄映射 | 操作 | 手柄按键 | |------|----------| | 选项导航 | 左摇杆 / 方向键(↑↓←→) | | 确认 | A 键(Xbox)/ × 键(PS) | | 取消/菜单 | B 键(Xbox)/ ○ 键(PS) | | QTE 按键 | A/B/X/Y 自动映射到 QTE 定义的 keys 顺序 | | 跳过 | Start 键 | | 倍速 | LB / RB 循环 | ### QTE 设备感知 - 键盘连接时 QTE 提示显示键盘按键名称(空格、WASD) - 手柄连接时 QTE 提示自动切换为手柄按钮图标(A/B/X/Y + 方向图标) - `QTESystem` 升级:输入源切换 + 按键提示动态渲染 ### 视觉反馈 - QTE Overlay 的中央圆圈根据设备动态渲染(键盘=方块内字母,手柄=圆形内图标) - 手柄连接后自动隐藏鼠标光标,`inputMode = 'gamepad'` - 手柄断连后自动恢复键盘模式,不再依赖手柄 ### 实现要点 - [ ] `engine/systems/InputSystem.ts` 升级 — `gamepadconnected`/`gamepaddisconnected` 事件监听 - [ ] Gamepad API 轮询(rAF 中 `navigator.getGamepads()` 读取摇杆/按键状态) - [ ] QTE 手柄映射逻辑:方向键/摇杆 → `keys[]` 中的方向匹配,按钮 → A/B/X/Y - [ ] `src/components/QTEOverlay.vue` 升级 — 根据 inputMode 渲染不同图标 - [ ] 键位映射配置持久化(IndexedDB) - [ ] 手柄震动反馈(`GamepadHapticActuator.pulse()`) - [ ] 手柄热插拔检测 + 自动切换 inputMode ## P11 多语言字幕 - 扩展 - 字幕字体/大小/颜色/背景自定义 - 语音语言独立轨道(语音和字幕可不同语言) - 自动检测浏览器语言 ## P12 场景过渡特效 - 扩展 - 可自定义转场(JSON 中定义颜色/时长/曲线) - 转场预览(编辑器中实时预览) - 条件转场(根据 variables 选择不同转场类型) ## P13 重玩驱动 - 扩展 - Steam Achievement API 集成 - 排行榜(最快通关、最少死亡等) - 分享结局截图到社交媒体 ## P14 沉浸感 - 扩展 - SFX 空间化(3D Audio,Web Audio PannerNode) - 对话轮动画曲线自定义 - 画面震动强度/频率可配置 - 动态字幕说话人识别(AI 自动标注) ## P15 章节回顾 — 关键节点时间线图(Life is Strange 方案) ### 背景 当前 P15 的章节回顾是**列表模式**(BFS 遍历可达场景 + visited/unvisited 列表 + 完成度百分比 + 条件提示),已满足核心目标——知道哪些场景到过、漏了什么、怎么解锁。 原计划使用 Vue Flow 完整分支图,但经评估后确认:分支数多时(多父同子、回边循环),自动布局的流程图会变成"意大利面",玩家理解成本反高于简单列表。 ### 业界对比 | 方案 | 做法 | 清晰度 | 成本 | |------|------|--------|------| | **Detroit 手绘图** | 美术逐章手工设计 InfoGraphic | 极高 | 极高 | | **Life is Strange 时间线** | 只画 `keyMoment` 标记的关键节点,Dagre 自动排成水平时间线,跳过琐碎小场景 | 高 | 中 | | **Telltale 纯统计** | 片尾弹出 "52% 玩家选了救 Doug",不画任何图 | N/A | 极低 | | **当前列表版** | BFS 遍历全场景 + visited/unvisited 标记 | 中 | 已实现 | ### 实施路线 当需要可视化展示时,采用 **Life is Strange 时间线方案**: **数据层:** ```ts // engine/types.ts interface SceneNode { // ...existing fields keyMoment?: boolean // 标记为"关键节点",只有这些节点出现在时间线图中 } ``` **布局引擎:** - 复用编辑器已有的 Dagre 布局(`editor/composables/useLayout.ts`) - `rankdir: 'LR'` 从左到右水平排列 - 只遍历 `keyMoment === true` 的场景,普通场景跳过不渲染 - 仅展示关键节点之间的 choices / nextScene / QTE 跳转关系 **视觉设计:** - visited 节点:绿色实心 - unvisited 节点:灰色虚线边框 - 回边(循环引用):虚线 + 半透明 - 条件提示:小锁图标 + 文本(如 `🔒 trust >= 80`) - 普通小场景完全不出现,避免线路交织 **组件:** - `src/components/ChapterTimeline.vue` — 新建,只读 Vue Flow + Dagre 时间线 - 与 `ChapterRecap.vue` 并列,不同入口或同一个面板的切换 Tab ### 优先级 低。列表版已满足 P15 核心目标,时间线图是锦上添花的视觉增强。 ## P15+ 平台分发 - 扩展 - PWA 支持(离线播放、安装到桌面) - Web Monetization API 付费解锁章节 - 开发者 API(第三方创作工具接入) ## 通用扩展 - 性能监控面板(FPS、内存、网络) - 自动化测试框架(剧情路径遍历、回归测试) - 热更新支持(不刷新页面替换 JSON 和视频) - WebSocket 多人同步(观察者模式、投票选分支) # AI化 在引擎的基础上深入融合AI,由AI去自动化完成引擎的使用。 AI的定位:一个对**使用引擎**降本增效的工具。懂业务的人还是主题,AI是辅助人的。 一个新技术的出现会帮助人类实现两种效果:突破式效果,帮助人类突破了一种以前从没有的能力,比如飞机帮助人类飞行,飞机之前人类无论如何都不能起飞的;降本增效式效果,改善了人类已有能力的效果,比如汽车帮助人类跑的更快了。 AI目前来看还是降本增效式效果,没有AI的帮助,人类也能做到现在AI能做的效果,只是成本高点、速度慢点。 无论一个工具如何强大,只要在懂业务的人的手里才能发挥效果。比如缝纫机的出现,并没有取代真正的衣服制作者,并不会让不懂衣服制作的所有人都能制作衣服,善于使用缝纫机的人还是本身就懂衣服制作的人,即使没有缝纫机,他也知道如何制作衣服,只是缝纫机更快更高质量的帮助他完成了衣服的制作。 AI工具也一样,一个不懂电影游戏制作的人,只靠AI是做不出高质量的东西的,只有本身就懂电影游戏制作的人,无论使用啥工具都能做出合格的产品。 本引擎就是帮助懂电影游戏制作的人更快更高质量的完成产品,AI是帮助引擎更容易使用,达到降本增效的效果。 引擎帮助人降本增效,AI帮助引擎更容易被使用和提升产出效率。