在 C# 和 XNA 4.0 中检测多个按键

Detecting multiple key presses in C# and XNA 4.0

我想检测在 C# 和 XNA 4.0 中是否同时按下了一组特定的键盘键。我正在使用以下代码这样做:

KeyboardState keyState = Keyboard.GetState();

if(keyState.IsKeyDown(Keys.S) && keyState.IsKeyDown(Keys.K) && keyState.IsKeyDown(Keys.I))
{
    //Do something
}

此代码检测用户是否同时按下 "S"、"K" 和 "I"。但是,我注意到此代码在一台计算机(Windows 8.1 笔记本电脑)上运行良好,但在另一台计算机(Windows 8 台式机)上运行良好。此外,我最初希望 if 语句检查用户是否同时按住 P 键("S"、"K"、"I" 和 "P"),但是添加第四个条件 (keyState.IsKeyDown(Keys.P)) 时,代码在两台计算机上均不起作用。为什么这段代码不能在多台机器上运行?为什么它会在尝试一次检测三个以上的键时出现故障并且根本无法工作?

这很可能是硬件问题 - 称为 keyboard ghosting -,而不是软件问题。根据我的经验,它最常发生在按下 3 个键时,而第 4 个键几乎破坏了所有传统键盘。 link 对此问题进行了详细说明,并测试一下是否真的是您遇到的键盘重影。

由于这是一个硬件问题,您无法在代码中对此做任何事情,除非重新设计它以使其适合硬件,即不需要三个按键或不同的按键...

如果您真的想要此代码正常工作,请购买具有 6 键翻转(最多 6 个键)或 n 键翻转(键盘上的所有键)的键盘。此功能意味着可以同时按下键盘上的所有键,而计算机仍会检测到所有键。

哦,here 是一个很好的视频,它以非常简单的方式解释了这个问题。