2026-06-14 20:25:49 +08:00
2026-06-14 20:25:49 +08:00
2026-06-10 14:16:46 +08:00
2026-06-10 10:30:43 +08:00
2026-06-10 10:30:43 +08:00
2026-06-07 13:50:05 +08:00

天书 天书 TianShu

天书不晦,落笔成途。
剧本由你执笔,命运自有分岔。

基于 Vue 3 + TypeScript 的浏览器端交互式电影游戏引擎。 零代码门槛:你只需要会剪视频和写 JSON。

快速开始

git clone <repo-url> mygame
cd mygame
npm install
npm run dev

打开 http://localhost:5173/ 看示例剧情。 打开 http://localhost:5173/editor/ 使用可视化剧情编辑器。

制作你的游戏

1. 准备素材

按场景组织素材,每个场景一个文件夹:

public/my_story/
  scene_1/video.mp4      ← 视频文件 (MP4 H.264, 1280×720)
  scene_2/video.mp4
  shared/bgm.mp3         ← 跨场景共享素材

2. 写剧情 JSON

创建 public/scenes/my_story.json

{
  "assetBase": "my_story/",
  "startScene": "scene_1",
  "variables": { "trust": 50 },
  "scenes": {
    "scene_1": {
      "id": "scene_1",
      "videoUrl": "scene_1/video.mp4",
      "choices": [
        { "text": "帮助他", "targetScene": "help_end" },
        { "text": "离开", "targetScene": "leave_end" }
      ]
    },
    "help_end": {
      "id": "help_end",
      "videoUrl": "scene_2/video.mp4",
      "choices": []
    },
    "leave_end": {
      "id": "leave_end",
      "videoUrl": "shared/video.mp4",
      "choices": []
    }
  }
}

3. 运行

npm run dev

浏览器打开 http://localhost:5173/?scene=my_story.json

引擎功能

功能 说明
视频分支播放 A/B 双缓冲无缝切换300ms 交叉淡化
选择系统 限时选择、条件分支(根据变量显示/隐藏)
选择提示 (Prompt) 重要选项前置金色标识 + 选后浮现提示文字
QTE 快速反应事件 视频中限时按键挑战,成功/失败导向不同分支
图片/视频热点 像素级精准定位,视频热点按时间显隐
循环等待 指定片段反复播放直到玩家做选择
独立 BGM 背景音乐独立轨道,场景切换交叉淡化
BGM Ducking 选择/QTE/热点出现时 BGM 自动压低
字幕系统 WebVTT 解析,多语言字幕一键切换
多语言 i18n UI + 数据层双语体系,支持动态扩展语言
章节系统 分章节管理,到达即解锁
成就系统 条件触发自动解锁,底部 Toast 弹窗
故事进度总览 章节完成度 + 结局解锁状态 + 条件提示
存档系统 IndexedDB 多槽位,跨会话持久化
开场视频 + 菜单背景 电影级启动流程
暂停菜单 Esc 呼出暂停面板:继续/存档/设置/主菜单
可访问性 字幕字号/背景、QTE 时限放宽/按键简化、防误触
跳过/倍速 已看场景可跳过1x/2x/4x 倍速
全屏模式 一键全屏沉浸式体验
键盘导航 方向键选选项Esc 暂停/菜单P 暂停
自动隐藏 UI 3s 无操作隐藏顶栏和光标
Electron 打包 macOS / Windows 桌面应用

文档索引

文档 内容 适合
快速开始 5 分钟做一个游戏 新手
JSON 字段参考 全部字段 + 类型说明 必读
分支叙事 选项/条件/变量/效果/Prompt 进阶
交互指南 QTE / Hotspot / Loop 进阶
国际化 多语言 UI + 数据层 进阶
打包发布 Web + macOS + Windows 分发
编辑器 可视化剧情编辑 可选
开发路线图 已实现/待实现功能 参考

目录结构

mygame/
├── engine/                     # 引擎核心(纯 TS不依赖 Vue
│   ├── core/                   # Engine / VideoManager / SceneManager
│   ├── systems/                # QTE / Choice / Audio / Achievement / Save
│   └── types.ts
├── src/                        # Vue UI 层
│   ├── components/             # 所有界面组件
│   ├── composables/            # 引擎 ↔ UI 桥接
│   ├── stores/                 # Pinia 状态
│   └── locales/                # UI 翻译(开发者维护)
├── editor/                     # 可视化剧情编辑器
├── electron/                   # Electron 桌面打包
├── public/                     # 你的素材(唯一需要编辑的目录)
│   ├── demo/                   # 示例数据(参考用)
│   │   ├── scenes/demo.json
│   │   └── locales/{zh,en,ja}.json
│   ├── your_story/             # 你的游戏
│   │   ├── scene_1/video.mp4
│   │   └── locales/zh.json
│   └── scenes/config.json      # 默认加载哪个 JSON
├── docs/                       # 文档
│   ├── guide/                  # 游戏制作引导
│   └── electron/               # 打包配置
├── scripts/                    # 打包脚本
└── ROADMAP.md

命令

npm run dev            # 启动开发服务器
npm run build          # 构建生产版本
npm run preview        # 预览构建结果
npm run pack:html      # 打包 Web 版
npm run pack:mac       # 打包 macOS 桌面应用
npm run pack:win       # 打包 Windows 桌面应用
Description
No description provided
Readme 3.5 MiB
Languages
Vue 57.2%
TypeScript 37.7%
JavaScript 4.1%
Shell 0.3%
Batchfile 0.3%
Other 0.3%