真人首测反馈「交互还是很迷惑」:大厅 15 款里只有 3 款新交互,其余 12 款 仍是旧版(无声操作、连点连跳),整体体验割裂。本次: - engine/pipeline.js 新增 makeCompatPipeline(纯增量,游戏内部逻辑零改动): · 手势后 100ms 无任何音频调度 → invalid 回执(消灭无声操作,原则 4) · 语音中的手势 → 立即 ok 回执(§4.1 打断即收到) · 语音中 tap 400ms 防连点(§4.2,点两下不连跳两句) · longpressend/tapcancel 收尾噪声直通 - engine/audio.js 加 playCount 探针(回执启发式用) - 12 款游戏 index.html 接入兼容管道(rhythm 保留 immediateTap; 双击判定窗口不动——多款游戏双击是核心玩法/菜单确认,重映射会破坏) - 可闻度调优(真人首测:笔记本外放偏轻,26 号 §3「起步值,真人测试后再调」): 回执增益 ok 0.08→0.11 / invalid 0.10→0.13 / busy 0.04→0.06; 等待声 0.03→0.055 - 大厅:三款深度重构游戏(声命线/暗室/音序回响)置顶 + 「新交互」徽标, 卡片文案直接写玩法手势,测试不再误入旧交互游戏 测试:新增 compat-pipeline.test(9 断言);全部 15 款 playtest 回归通过 (共 3900+ 断言,0 失败);引擎 input/voice/guide 回归通过。
41 lines
1.6 KiB
HTML
41 lines
1.6 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="zh-CN">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<!-- viewport 锁缩放,viewport-fit=cover 适配刘海屏 -->
|
|
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no, viewport-fit=cover">
|
|
<title>雨夜专案 · SoundGame Web</title>
|
|
<link rel="stylesheet" href="../engine/style.css">
|
|
</head>
|
|
<body>
|
|
<!-- 全屏根元素:手势全屏捕获层,封面图放里面 -->
|
|
<div id="game-root">
|
|
<img class="cover" src="cover.png" alt="">
|
|
</div>
|
|
|
|
<!-- 标准接线:遮罩解锁音频 → start() → attachGestures(引擎手册"音频解锁流程")。
|
|
遮罩不传 text:按 gesture.inputMode() 自适应「轻触开始」/「按空格开始」。 -->
|
|
<script type="module">
|
|
import { WebAudioEngine } from '../engine/audio.js';
|
|
import { attachGestures } from '../engine/gesture.js';
|
|
import { Receipts } from '../engine/receipts.js';
|
|
import { makeCompatPipeline } from '../engine/pipeline.js';
|
|
import { DetectiveGame } from './game.js';
|
|
|
|
async function main() {
|
|
const root = document.getElementById('game-root');
|
|
const audio = new WebAudioEngine('audio/');
|
|
const game = new DetectiveGame(audio, root);
|
|
|
|
await audio.showStartOverlay({ cover: 'cover.png' });
|
|
game.start();
|
|
// 26 号 P0:兼容输入管道(无声操作回执 + 防连点;游戏手势语义不变)
|
|
const pipe = makeCompatPipeline({ audio, receipts: new Receipts(audio), game });
|
|
attachGestures(root, pipe);
|
|
}
|
|
|
|
main();
|
|
</script>
|
|
</body>
|
|
</html>
|