繁体   English   中英

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

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

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

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

SlimDX是否可以在C#上使用? 如果是这样,怎么办? 如果没有,是否有更好/更低延迟的C#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,而按钮仍处于按下状态,则两种状态都将为true,并且不会运行第二次编码。 直到释放并重新按下按钮后,第一个if语句才会再次为true。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM