SharpDX.Xinput 检查按钮是否被按住而不是被按下
SharpDX.Xinput Check if A button is being held down instead of being pressed
我正在尝试检查我是否按住了 xbox 控制器上的 A 按钮。现在我有了它,所以我可以看到我的按钮是否被按下但没有被按住。这是我现在用来查看是否被按下的代码。
private void Loop()
{
while (true)
{
var state = _controller.GetState();
var LX = state.Gamepad.LeftThumbX;
var LY = state.Gamepad.LeftThumbY;
var magnitude = Math.Sqrt(LX * LX + LY * LY);
if (magnitude > _deadzone)
{
MoveCursor(LX, LY * -1);
Thread.Sleep(20);
}
if (state.Gamepad.Buttons == GamepadButtonFlags.A)
{
LeftClick();
Thread.Sleep(100);
}
else if (state.Gamepad.Buttons == GamepadButtonFlags.B)
{
RightClick();
Thread.Sleep(100);
}
}
}
要区分按钮触发(第一次按下)与按钮按住,您必须保存状态并与每一帧进行比较。如果前一帧没有按下按钮,但你在这一帧按下了按钮,那么你的用户只是触发了按钮。如果前一帧按下并且它仍然按下,那么用户正在按住按钮。如果上一帧按下但不再按下,则用户松开按钮。
但诀窍是您必须保存前一帧的按钮状态,以便您可以将其与当前按钮状态进行比较。
我正在尝试检查我是否按住了 xbox 控制器上的 A 按钮。现在我有了它,所以我可以看到我的按钮是否被按下但没有被按住。这是我现在用来查看是否被按下的代码。
private void Loop()
{
while (true)
{
var state = _controller.GetState();
var LX = state.Gamepad.LeftThumbX;
var LY = state.Gamepad.LeftThumbY;
var magnitude = Math.Sqrt(LX * LX + LY * LY);
if (magnitude > _deadzone)
{
MoveCursor(LX, LY * -1);
Thread.Sleep(20);
}
if (state.Gamepad.Buttons == GamepadButtonFlags.A)
{
LeftClick();
Thread.Sleep(100);
}
else if (state.Gamepad.Buttons == GamepadButtonFlags.B)
{
RightClick();
Thread.Sleep(100);
}
}
}
要区分按钮触发(第一次按下)与按钮按住,您必须保存状态并与每一帧进行比较。如果前一帧没有按下按钮,但你在这一帧按下了按钮,那么你的用户只是触发了按钮。如果前一帧按下并且它仍然按下,那么用户正在按住按钮。如果上一帧按下但不再按下,则用户松开按钮。
但诀窍是您必须保存前一帧的按钮状态,以便您可以将其与当前按钮状态进行比较。