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

时间:2015-07-23 05:32:02

标签: c# xna slimdx xinput

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

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

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

提前致谢!

1 个答案:

答案 0 :(得分: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;
}

我们说它检测到按下按钮并运行相应的代码,然后下次轮询(10ms),因为前一个状态切换为true,按钮仍然按下,则两个状态都将是真的,它不会第二次运行代码。在释放并重新按下按钮之前,第一个if语句将不再为真。