1

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

现在我有一个运行时间为 10 毫秒的计时器,它会检查哪些按钮被按下并据此运行。但是假设您按下 X 一秒钟 = 它检测到 X 被“按下”了 100 次,因为好吧,每 10 毫秒,X 被按下。我只想在按下按钮时触发我的事件,而不必依赖计时器。

在 C# 上可以使用 SlimDX 吗?如果是这样,怎么做?如果没有,是否有更好/更低延迟的 C# XInput 包装器可以满足我的需要?

提前致谢!

4

1 回答 1

1

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

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,并且按钮仍然被按下,那么这两个状态都将为 true,它不会运行第二次编码。在释放并重新按下按钮之前,第一个 if 语句不会再次为真。

于 2015-07-23T14:07:19.477 回答