【问题标题】:XNA Keyboard.GetState() Not returning all keys pressedXNA Keyboard.GetState() 不返回所有按下的键
【发布时间】:2014-03-06 22:29:39
【问题描述】:

我正在学习 XNA (v. 4.0),我正在使用键盘上的箭头键移动精灵,以及在按住空格时让角色冲刺。

下面是我的代码来确定按下了哪些键:

currentKBState = Keyboard.GetState();

bool right = currentKBState.IsKeyDown(Keys.Right);
bool left = currentKBState.IsKeyDown(Keys.Left);
bool up = currentKBState.IsKeyDown(Keys.Up);
bool down = currentKBState.IsKeyDown(Keys.Down);
bool space = currentKBState.IsKeyDown(Keys.Space);

System.Diagnostics.Debug.WriteLine(String.Format("{0} {1} {2} {3} {4}", right, left, up, down, space));

问题是我不能同时按下所有 5 个。有时只有两个会注册。例如,如果我按住 Up、Down 和 Left,它只会说 up 和 down 是正确的,无论我按住三个键多久。无论按下什么组合,我都希望能够处理。为什么它不注册所有被按下的按钮?我需要其他方法吗?

【问题讨论】:

  • 这可能是您拥有的键盘造成的。

标签: c# xna keyboard


【解决方案1】:

这不是代码问题。这是键盘硬件的限制。

便宜的键盘可以可靠地检测到两个并发按键,但在三个键的某些组合上可能已经失败。

Rollover (key)

现代键盘检测到重影,而不是注册第四个键,它们会忽略第三个键,这就是所谓的干扰。按下时会卡住的键因品牌和型号的键盘而异。由于大多数消费类键盘使用的键盘矩阵,当按下矩阵上方形块中的四个键中的三个(例如 QASW 或 JKUI)时,经常会出现卡顿和重影。

【讨论】:

  • 我发现一个网站说要通过同时按住 shift 键并输入“快速棕色狐狸跳过懒狗”来测试这个,我的键盘得到了这个......“HE QUIK BROWN FO JUPS OER HE 拉狗”。所以这似乎是问题所在。谢谢!我已经尝试调试了一个小时。 (将在 5 分钟内接受答复)
  • 那只敏捷的棕色狐狸跳过了那只懒狗。有趣的是,我的键盘处理得很好,但不能处理一个块内的 3 个键。
  • @Smith.h.Neil 正如维基百科所说,矩阵取决于键盘的品牌。好的键盘通常可以同时支持任意 6 个键而不会出现问题。在硬件方面,他们通常可以超越这一点,但unlike PS/2 USB is limited to 6 key rollover by default.
  • 有趣,我刚试了一下,得到了THKBNFJSTHLAYDG,我猜是这些便宜的笔记本电脑键盘
【解决方案2】:

你可以试试

Keys[] currentPressedKeys = currentKeyboardState.GetPressedKeys();

然后循环遍历 Keys 并检查是否有一些被按下

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多