语境
我和一个朋友正在玩一款游戏,游戏中扮演特定角色的优化方法是同时按住两个按钮,即 和Q。E这意味着在游戏中与这些键绑定的两个技能将交替触发。
即当按住Q和 时E:Q E Q E Q E Q E Q E
问题
问题在于,当我按住 Q 和 E 键时,我无法复制我朋友所做的事情。我得到的却是:
即按住Qand E: Q E E E E E E E E E
or E Q Q Q Q Q Q Q Q
(取决于首先检测到哪个键)
与我的朋友讨论后,他说除了防鬼键功能外,还有 n 键翻转功能,才能实现此功能。
然而,当我们开始深入研究这个问题时,它变得越来越没有意义,因为我们的两款键盘都具有上述功能。如果这能提供更多背景信息,下面列出了我们的两款键盘。
我现在想弄清楚的是,为什么他的键盘可以这样操作,而我的键盘却不能。
答案1
仅当按下至少三个键时,防鬼影功能才会发挥作用 - 只有两个键无关紧要,因此在这里无关紧要。
对于 USB 键盘,按键重复行为取决于软件,而不是键盘。键盘只是告诉计算机当前按下的所有键(最多为键盘支持的“翻转”限制),并在该状态发生变化时通知计算机。操作系统负责将按住的键列表与之前的状态进行比较,并生成适当的“按下键”和“释放键”事件,操作系统负责注意某个键何时被按下了一定时间,并在适当的情况下生成额外的事件。
每个系统我有ever seen 的行为方式与您描述的系统行为方式相同 — typematic 只会对按下的最后一个键生成重复,并且只在按住该键的情况下生成重复(如果您释放该键,但仍按住之前按下的其他键,则根本不会重复)。但由于行为是由软件定义的,因此应该可以在软件中覆盖它,只要键盘至少为 2KRO(基本上所有键盘都是 2KRO;1KRO 会使熟练的触摸打字基本不可能)。
答案2
为了回答这个问题,必须了解键盘的工作原理。
如果回顾早期的键盘,您会发现插头上只有几个插针,而不是与键盘上的按键数量相同。
尽管如此,如果你按下键盘上的一个键,它仍然会立即传输到电脑上,没有任何延迟。那么这是怎么可能的呢?
键盘使用水平和垂直信号矩阵工作。所有按键都按照键盘上显示的网格排列。按下某个键时,它不会只显示“x”键被按下,而是显示“第 3 列第 5 行上的键被按下”。这意味着最终数据线的数量不是按键数量,而是行数和列数(优化)。
现在的问题在于,当您同时按下多个键时,矩阵现在无法确定按下了哪个键,这就是为什么某些键盘一次只能按下 2 个键而第 3 个键被忽略的原因。
为了解决这个问题,矩阵已经重新设计以减少这种情况的发生,这就是为什么有些键盘声称你可以按下 4 或 5 个键,但如果你找到神奇的组合,你就可以再次按下 2 个键,但由于大量的反复试验,这种情况发生的频率要低得多。
因为这最终还是成了一个问题,所以人们使用了其他方法来真正支持多次按键,也就是所谓的防重影。这里的问题是,它可以通过多种方式实现,这就是为什么有些键盘提供 QEQEQE,而其他键盘提供 QEEEE 或 EQQQQQ。
长话短说,为了允许同时按下多个按键,根据开发预算的多少和使用的方法,不同型号同时按下多个按键的行为是不同的。
较新的游戏键盘会将所有击键快速发送到计算机,通过 USB 发送到驱动程序,驱动程序可以告诉软件按下了哪些键,显示 QEQEQEQE,而较旧的键仍然使用矩阵并使用硬件键,仅显示 QEEEEEEE 或 EQQQQQQ。
答案3
使用 USB 键盘时,如果键盘在同一 HID 输入报告中发送两个键的按键事件,则 Windows 中会发生这种“同时自动重复两个键”的行为。我甚至通过自定义修改来测试了这一点QMK 键盘固件,我可以精确控制通过 USB 发送哪些 HID 输入报告。其他操作系统可能没有这种行为(例如,Linux 始终只选择一个键进行自动重复)。
至于为什么不同的键盘对此功能有不同的行为,可能有几种解释:
使用较高的扫描率对按键进行计时以便它们能够在同一个 HID 输入报告中进行报告可能会更加困难(因此在具有 250 Hz 频率的旧键盘上触发双重自动重复可能比在具有 1000 Hz 频率的新键盘上更容易)。
尽管如今大多数“游戏”键盘都宣传其“1000 Hz 速率”(因此间隔超过 1 ms 的按键应在单独的输入报告中报告),但这种宣传并不总是 100% 真实的 - 特别是,某些去抖动算法可能会导致报告的按键同步,即使检测到的物理按键间隔超过 1 ms。
某些键盘可能在固件中执行特殊处理(例如,与宏支持相关),这会导致每次按键状态改变时生成单独的 HID 输入报告 - 如果键盘固件以这种方式编写,则即使使用最精确的按键时间,也不可能从中获取“双重自动重复”。
答案4
一种可能的解决方法是某些键盘支持宏,因此您可以编写一个宏来执行 QE,然后在按住宏键时重复执行。我以前在旧 Razer Blackwidow 上玩暗黑破坏神 2 或 3 时这样做过。Razor 控制应用程序有一个宏编辑器,可以让我选择只发送一次序列或重复发送,直到我停止按住该键。如果您没有专用的宏键,您可以将宏设置为游戏中未使用的键(可能是功能键或反引号或类似的东西)。