From d754b71e65ea8eeeb74ddb3b9669b735948034a5 Mon Sep 17 00:00:00 2001 From: lili Date: Sun, 14 Jun 2026 10:34:43 -0700 Subject: [PATCH] =?UTF-8?q?fix(host):=20attachInput=20=E8=A1=A5=20keydown/?= =?UTF-8?q?keyup=20window=20=E6=A1=A5=E6=8E=A5(getInput=20=E5=A5=91?= =?UTF-8?q?=E7=BA=A6=20key=20=E4=B8=A4=E6=80=81)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit boot-game-host.js attachInput() 原只桥 pointerdown/move/up,漏 keydown/keyup → ctx.getInput() 键盘通道空,所有方向键/空格游戏(2048/Tetris/Asteroids)输入死。对齐同仓 host-dev/host.js:427-428 范式挂 window 桥 ev.key。纯增量、零兼容风险(inputBridge _assertType 白名单已含 keydown/keyup)。W-G1 scale-20 两轮对抗诊断实证:失败严格沿键盘 vs 指针分界。属 L0 域冻结契约修复,经创始人授权隔离执行,供 cherry-pick 到 dev/2.0.0。 Co-Authored-By: Claude Opus 4.8 (1M context) --- game-runtime/src/host/boot-game-host.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/game-runtime/src/host/boot-game-host.js b/game-runtime/src/host/boot-game-host.js index 2e5fbe77..9339dc2a 100644 --- a/game-runtime/src/host/boot-game-host.js +++ b/game-runtime/src/host/boot-game-host.js @@ -306,6 +306,11 @@ export async function bootGameHost(opts) { targetCanvas.addEventListener('pointerup', (ev) => { inputBridge._emit('pointerup', toCanvasXY(ev.clientX, ev.clientY)); }); + // 键盘桥接:挂 window(键盘无 canvas rect,坐标无关),补齐 getInput 契约的 key 两态。 + // 对齐同仓 host-dev/host.js:427-428 已有范式;W-G1 scale-20 两轮对抗诊断实证: + // 原 attachInput 漏此桥 → 所有方向键/空格游戏(2048/Tetris/Asteroids)输入永远收不到、score≈0、phase 永久 playing。 + window.addEventListener('keydown', (ev) => { unlockAudioOnce(); inputBridge._emit('keydown', { key: ev.key }); }); + window.addEventListener('keyup', (ev) => inputBridge._emit('keyup', { key: ev.key })); } /* ── RAF(stub play 模式)── */