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

本文关键字:检测 XNA | 更新日期: 2023-09-27 17:51:11

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

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

这很可能是硬件问题——称为键盘重影——而不是软件问题。根据我的经验,最常见的情况是按下3个键,而按第4个键几乎会破坏所有传统键盘。这个链接是对这个问题的详细解释,以及一个测试,看看你是否真的遇到了键盘重影。

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

如果你真的想要这个代码工作,买一个有6键翻转(最多6键)或n键翻转(键盘上所有键)的键盘。这个功能意味着键盘的所有键可以同时被按下,而所有的键仍然被计算机检测到。

哦,这里有一个很好的视频,用非常简单的方式解释了这个问题。