feat: electron desktop packaging, CDN asset migration, production docs, scene JSON spec
This commit is contained in:
71
ROADMAP.md
71
ROADMAP.md
@@ -925,6 +925,77 @@ QTE 成功 / 到达隐藏结局 / 通关等"事件型"成就,通过在对应 e
|
||||
- [x] `src/App.vue` — 使用 `MainMenu` 替代散装 `start-overlay` 按钮 + `game-end-overlay`;移除 60 行旧 CSS
|
||||
- [x] 验证:TypeScript + Vite build 通过
|
||||
|
||||
### P18 视频加载失败恢复(待实现)
|
||||
|
||||
目标:视频加载失败时显示错误画面 + 重试/跳过按钮,不再 `play().catch(() => {})` 静默黑屏。
|
||||
|
||||
**改动点:**
|
||||
|
||||
- [ ] `engine/core/VideoManager.ts` — `play`/`switchTo` 增加错误回调(`onerror` 事件 + `play()` reject);
|
||||
超时检测(5 秒未 `canplay` 视为失败);重试逻辑(最多 3 次,指数退避 1s/2s/4s)
|
||||
- [ ] `src/components/VideoErrorOverlay.vue` — 错误画面:警告图标 + "视频加载失败" + [重试] [跳过此场景] 按钮
|
||||
- [ ] `src/stores/gameStore.ts` — `videoError` 状态(`{ sceneId: string, message: string, retryCount: number }`)
|
||||
- [ ] `src/App.vue` — 整合 VideoErrorOverlay;跳过逻辑重试当前场景或调用 `engine.skipCurrentScene()` 强制跳过
|
||||
- [ ] 验证:断网播放 → 错误画面 → 重试恢复 → 跳过进入下一场景
|
||||
|
||||
### P19 制作者工具链 — HTML / macOS / Windows 打包 ✅ 已完成 2026-06-09
|
||||
|
||||
目标:制作者 clone `moviegame` 源码后可直接开发。`npm run dev` 已有 Vite HMR 实时预览,
|
||||
三行命令打包为 Web zip / macOS 应用 / Windows 可执行文件。
|
||||
|
||||
**新策略:废弃 `moviegame-starter`。** 制作者直接 clone `moviegame` 完整源码,
|
||||
放视频 + 写 JSON + 改 Vue 组件,最大定制权限。
|
||||
|
||||
**命令设计:**
|
||||
|
||||
```bash
|
||||
npm run dev # Vite 实时预览(已有)
|
||||
npm run pack:html # 打包 Web 版 → release/mygame.zip
|
||||
npm run pack:mac # 打包 macOS → release/MyGame-darwin-arm64/
|
||||
npm run pack:win # 打包 Windows → release/MyGame-win32-x64/
|
||||
```
|
||||
|
||||
**实施方案:**
|
||||
|
||||
| 工具 | 技术 | 说明 |
|
||||
|------|------|------|
|
||||
| Web 打包 | `vite build` + zip | 产物 `release/mygame.zip`,上传 itch.io 选 HTML 类型 |
|
||||
| 桌面打包 | Electron + `@electron/packager` | 一行 CLI 命令,零配置。不用 `electron-builder`(不需要安装向导/代码签名/自动更新这些重武器) |
|
||||
|
||||
**选 electron-packager 而非 electron-builder:**
|
||||
|
||||
- `electron-packager`:打包成可直接运行的文件夹(`.app` / `.exe`),一行命令。**刚好够用。**
|
||||
- `electron-builder`:打包成安装器(`.dmg` 安装向导 / NSIS Setup),附带代码签名、自动更新。**对我们过度。**
|
||||
|
||||
**Electron 最小结构:**
|
||||
|
||||
```
|
||||
electron/
|
||||
├── main.js # 全屏窗口 + 加载 dist/index.html(10 行)
|
||||
└── package.json # electron + @electron/packager 依赖
|
||||
```
|
||||
|
||||
```js
|
||||
// electron/main.js
|
||||
const { app, BrowserWindow } = require('electron')
|
||||
app.whenReady().then(() => {
|
||||
new BrowserWindow({ fullscreen: true, autoHideMenuBar: true }).loadFile('dist/index.html')
|
||||
})
|
||||
app.on('window-all-closed', () => app.quit())
|
||||
```
|
||||
|
||||
**实现清单:**
|
||||
|
||||
- [x] `scripts/pack-html.mjs` — `vite build` + JSON 验证 + zip → `release/mygame.zip`
|
||||
- [x] `electron/main.js` — Electron 主进程,全屏窗口(3 行)
|
||||
- [x] `electron/package.json` — `electron` + `@electron/packager` 依赖
|
||||
- [x] `package.json` — 新增 `pack:html`/`pack:mac`/`pack:win` scripts
|
||||
- [x] `README.md` — 面向制作者重写
|
||||
- [x] `public/` — 清理 demo 视频,只保留 1 个示例(intro.mp4 + demo.json + intro.vtt)
|
||||
- [x] `.gitignore` — 视频/音频/图片目录忽略,release/ 忽略
|
||||
- [x] 删除 `moviegame-starter` 整个目录
|
||||
- [x] 验证:TypeScript + Vite build 通过
|
||||
|
||||
## 依赖清单
|
||||
|
||||
```json
|
||||
|
||||
Reference in New Issue
Block a user