C# + SlimDX / XInput - 按下按钮时如何轮询?

C# + SlimDX / XInput - how to poll when button is pressed?

我需要与 Xbox 360 控制器进行交互,但我有限的知识让我只能使用 C#。我不想为这个简单的事情使用 XNA(并要求用户安装它),所以我使用 SlimDX 来允许我与 XInput 交互。我已经能够检测到所有按钮按下并且小程序正在运行......但我需要知道如何轮询/知道何时按下按钮,然后触发事件。

现在我有一个计时器 运行,时间为 10 毫秒,它会检查按下了哪些按钮并根据该按钮进行操作。但是假设你按下 X 一秒钟 = 它检测到 X 是 "pressed" 100 次,因为好吧,每 10 毫秒,X 被按下一次。我只想在按下按钮时启动我的事件,而不必依赖计时器。

是否可以在 C# 上使用 SlimDX?如果是这样,如何?如果没有,是否有用于 C# 的 better/lower 延迟 XInput 包装器可以满足我的需要?

提前致谢!

创建两个变量来存储按钮在轮询之间的状态。

bool curretButtonState;//pressed == true
bool previousButtonState;

//poll each 10ms
void CheckInput()
{
  currentButtonState = pollResult;

  if(currentButtonState == true && previousButtonState == false)
  {
    //button just pressed, call code
  }
  if(currentButtonState== false && previousButtonState == true)//additional functionality if desired
  {
    //button just released, call other code
  }

 previousButtonState = currentButtonState;
}

假设它检测到按钮按下并且 运行 是您的适当代码,然后在下一次轮询(10 毫秒)时,因为之前的状态已切换为 true,并且按钮仍然被按下,然后两种状态都是真实的,它不会 运行 代码第二次。在释放并重新按下按钮之前,第一个 if 语句不会再次为真。