
我现在在一个全局脚本中,通过上述的方式注册了,按键的按下与抬起
但是目前出现了一个问题,我尝试了几种方案来进行修复,但是都没修复
所以想请教一下各位大佬,我该如何修复或排查呢?
重现流程
当我按下W时(触发W按下事件),此时按住W并按下D(触发D按下事件)
(这里没问题)
如果此时,我按住W不放,松D(触发D抬起事件)

(主要是这里为什么会自动触发)
如果此时,我按住D不放,松W(触发W抬起事件),但是这个时候,系统会自动触发D的按下事件


我现在在一个全局脚本中,通过上述的方式注册了,按键的按下与抬起
但是目前出现了一个问题,我尝试了几种方案来进行修复,但是都没修复
所以想请教一下各位大佬,我该如何修复或排查呢?
重现流程
当我按下W时(触发W按下事件),此时按住W并按下D(触发D按下事件)
(这里没问题)
如果此时,我按住W不放,松D(触发D抬起事件)

(主要是这里为什么会自动触发)
如果此时,我按住D不放,松W(触发W抬起事件),但是这个时候,系统会自动触发D的按下事件

陈年老bug了,自己做个状态记录吧
const pressMap = {};
input.on(Input.EventType.KEY_DOWN, (event: EventKeyboard) => {
if (pressMap[event.keyCode]) {
return;
}
pressMap[event.keyCode] = true;
}
input.on(Input.EventType.KEY_UP, (event: EventKeyboard) => {
delete pressMap[event.keyCode];
}
哦 原来是BUG哦 我还以为是自己的问题哦 那就行 谢谢了
当你按下一个按键后,html会先触发一次,之后会间隔一段时间反复触发keydown事件,直到按键抬起。
所以从另外一个角度分析,此时D仍旧是按下状态,根据上边的规则,就是应该触发按下D,没毛病!
我写了个例子,你可以看下原生的效果