![](/img/trans.png)
[英]C# | SharpDX.XInput | How to detect if a button on the controller was pressed once and is not getting hold down
[英]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.