【问题标题】:Accepting more simultaneous keyboard inputs接受更多的同时键盘输入
【发布时间】:2011-01-03 02:44:22
【问题描述】:

有时,普通的计算机键盘只能同时接受用户输入的某个键。我有一个罗技键盘,最多可以同时接受 3-4 个按键。如果您按此键盘的 4 个以上键,计算机将不再接受任何输入。它还取决于键盘的某些区域。某些位置允许按下更多键(如箭头键),而某些位置仅允许您按下 1-2 个键。这也因键盘而异。一些较旧的键盘最多只能接受 1-2 个键。

这在日常办公室工作中没有问题,但在游戏方面。例如,想象一个平台游戏,你必须同时跳跃、攻击和控制方向。这意味着多次按键,并且一些键盘不能接受这样的同时输入。但是,我在几款游戏上都试过了,可能的键盘输入量似乎也不同。因此,我们有两个问题:

  1. 键盘有不同数量的同时输入。
  2. 某些游戏可以接受比其他游戏更多的键盘输入。

起初,我以为这只是硬件问题,但为什么有些程序的行为会有所不同?为什么有些程序可以接受比其他程序更多的键盘输入?那么我们如何编写程序来接受更多的键盘输入呢?

【问题讨论】:

    标签: keyboard user-input keyboard-events simultaneous


    【解决方案1】:

    其他论坛的引用完全不正确...

    键盘始终使用矩阵,并且按键薄膜上的 8x8 排列/微动开关将覆盖 64 个按键。向一个公共行发送电源并一次拾取哪一列(如果有的话)电源连接到一个 - 它只是扫描得非常快。控制器芯片可以轻松地一次确定任意数量的按键(包括所有按键),而不会对性能造成任何影响(无论如何,它必须轮询每个按键,无论是向上还是向下)。

    然后,该信息由键盘序列化,以通知主机发生了哪些事件(限制因素是芯片 #1 的设计以及它想要放在总线 #2 上的流量)。它们被驱动程序转换为适当的操作系统事件(限制因素#3)。这些事件随后由应用程序处理,而这些应用程序又可能对它们跟踪的键数有自己的限制 (#4)。

    发生了很多事情,但自 60 年代左右以来,他们还没有使用每个键 + 接地线 1 根线。如果您认为矩阵的扫描速度不够快 - 查看任何 lcd/led 屏幕,这就是相同的矩阵正在发生,只是相反。

    【讨论】:

    • “一次确定尽可能多的键(包括所有键)”鉴于 areve 的答案中的信息,此语句完全错误。
    • 感谢您的反馈 - Areve 的回答是对此处涵盖的许多限制因素的实际演示。一个矩阵可以轮询超过 8x8 或更多开关而没有问题,这是无法回避的事实,考虑一下您需要为 1080p/100Hz 显示 1920x1080x8x3x100 二进制事件每秒移动的数据量。
    • 我知道矩阵化可以惊人地增加可以输入或输出的数据量。在输出上从来没有问题,因为在 LCD 中,它会在任何给定时间选择显示哪一列,而不会同时选择两列。但是,在输入时,计算机无法选择用户同时按下哪些列/行,如果两行和两列短接在一起,则会导致按键不明确。您的总结的其余部分非常有用,因为它表明即使第一个硬件矩阵问题得到解决,仍然存在其他障碍。
    • 硬件矩阵问题已通过各种方式得到修复。这是一个例子。 “SideWinder X4 的内部电子设备使用电阻式多点触控技术的变体。每个按键都有一个与其开关串联的丝网印刷电阻器。这允许内部电子设备独立读取每个按键开关的状态,以实现非常大的多键组合。” microsoft.com/appliedsciences/content/projects/…
    【解决方案2】:

    如果你想解决这个问题,你需要购买更昂贵的键盘。

    一个名为 GlovePie 的程序允许来自不同来源的可编程输入,可以解决这个问题。 GlovePie 下载页面Here.~

    例如,我正在开发一款 RPG 游戏,但笔记本电脑的键盘无法检测到 Run + Up + Left(向东北方向运行)的组合。但是,如果我插入我的 USB Logitech 控制器并使用 GlovePie 将这些确切的键盘键(向上、向左和 B [运行])映射到控制器的按钮,我可以执行向东北运行的命令没有问题。

    至于您的问题,我不确定为什么程序对键盘输入的反应不同,但这可能与它们如何检测您的输入有关。例如:基于 Java 的游戏可能会检测 DirectInput (从您的输入/输出设备发送的签名),而模拟器(如用于 PC 的 SNES 模拟器 ZSNES)可能仅检测到正在使用的“向上”键的实例。 另一个输入模拟程序 AutoHotkey 无法控制基于 Java 的游戏,因为它不使用游戏检测到的相同形式的输入(它不使用 Java 的 DirectInput)。

    所以,为了获得更多密钥,我会使用一个运行 GlovePie 的 USB 控制器。

    引自另一个论坛: “这不是一个真正的问题(技术上)。解决方案非常简单,但增加了键盘的成本。考虑这个简单的问题:你有 64 个键。如果你想区分每个可能的同时键,你需要多少根线回答:65,一个通用键,每个键一个。但是,如果您将按键排列成一个 8x8 键的阵列,则只需要 16 根线。8 根用于列,8 根用于行。这样可以减少引脚数量键盘控制器芯片,使键盘的生产成本降低了很多。我见过的所有键盘都是这样生产的。”

    【讨论】:

      【解决方案3】:

      我找到了一篇很好的文章Keyboard Ghosting Explained!,它解释了我在这个问题上需要知道的一切。它有一个测试区,所以我可以找出我笔记本电脑上的哪些按键组合不能很好地配合使用。

      【讨论】:

      • 感谢您的链接,对解释和演示非常有用。
      • 链接已失效。链接腐烂已使此答案无效。
      • 而 Web.Archive.org 可以修复它! web.archive.org/web/20160302190753/https://www.microsoft.com/…(那里有用的小测试应用程序 - 它通常不像“最多 3 个”那么简单 - 我通常可以得到 6 个键加上 Shift/Ctrl,但最多 2 个箭头,并且某些小键盘组合会做 3 而其他人只做2 - 1/2/3 没问题,0/1/3 没问题,0/1/2 或 0/2/3 不注册第三个键!)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-25
      • 2011-05-21
      相关资源
      最近更新 更多