feat: electron desktop packaging, CDN asset migration, production docs, scene JSON spec

This commit is contained in:
2026-06-09 23:20:27 +08:00
parent 48fb89449a
commit 3a7dd2f405
35 changed files with 900 additions and 135 deletions

View File

@@ -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.html10 行)
└── 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