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

时间:2015-05-31 00:06:32

标签: c# keyboard xna state

我想检测在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)),代码在两台计算机上都不起作用。为什么这段代码不适用于多台机器?当试图同时检测三个以上的键时,它为什么会出现故障并且根本无法工作?

1 个答案:

答案 0 :(得分:0)

这很可能是一个硬件问题 - 名为keyboard ghosting - 而不是软件问题。根据我的经验,最常见的是3键按下,第4键几乎打破了所有传统键盘。这个链接是对这个问题的详细解释,还有一个测试,看看它是否真的让你遇到键盘重影。

在你的代码中没有什么可以做的,因为它是硬件问题,除了重新设计它以适应硬件,即不需要三个按键或不同的按键......

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

哦,here是一个很棒的视频,可以用非常简单的方式解释这个问题。