JS游戏非英文输入法下WASD按键无响应问题修复咨询
修复非英文输入法下WASD按键识别失效的问题
问题根源在于你使用了event.key判断按键——切换到非英文输入法时,event.key会返回输入法生成的字符(而非物理按键本身的标识),导致WASD的判断逻辑失效。另外你的代码里存在笔误:第一个case 'w'实际是要处理D键的逻辑,这会直接覆盖W键的部分逻辑。
修复方案是改用**event.code**,它对应物理按键的标准编码,不受输入法状态影响:
- W键的编码为
KeyW - A键为
KeyA - D键为
KeyD - 空格为
Space
同时修正代码中的笔误,以下是修复后的完整代码:
window.addEventListener('keydown', (event) => { if (!player.isDead){ switch (event.code) { case 'KeyD': // 对应物理D键,修正原笔误 keys.d.pressed = true; player.lastkey = 'd'; break; case 'KeyA': // 对应物理A键 keys.a.pressed = true; player.lastkey = 'a'; break; case 'KeyW': // 对应物理W键 if(player.position.y > 0) { player.velocity.y = -10; } break; case 'Space': // 对应物理空格键 player.Attacking(); if(player.lastkey === 'd'){player.SwitchSprite('punch')} else{player.SwitchSprite('fpunch')} break; } } });
额外说明:
event.code兼容性覆盖所有现代浏览器,完全适合游戏中物理按键的输入判断需求- 如果你的代码中还有
keyup事件监听,需要同步改成event.code,保证按键状态逻辑一致
内容的提问来源于stack exchange,提问作者SikkPythons
相关产品推荐
相关产品推荐

