SharpDX.Xinput Проверьте, удерживается ли кнопка А вместо нажатия

Я пытаюсь проверить, нажимаю ли я кнопку "А" на контроллере xbox. Прямо сейчас у меня есть это, таким образом я могу видеть, нажата ли моя кнопка, но не удерживается ли. Это код, который я использую прямо сейчас, чтобы увидеть, нажимается ли он.

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);
            }
        }
    }

1 ответ

Решение

Чтобы отличить триггеры кнопок (первое нажатие) от удерживаемых кнопок, необходимо сохранить состояние и сравнить его с каждым кадром. Если в предыдущем фрейме кнопка не была нажата, а у вас была эта кнопка, то пользователь просто нажал кнопку. Если предыдущий кадр был неактивным, а он все еще не активен, то пользователь удерживает кнопку нажатой. Если предыдущий кадр был недоступен, но больше не выключен, то пользователь отпустил кнопку.

Но хитрость в том, что вы должны сохранить состояние кнопки предыдущего кадра, чтобы сравнить его с текущим состоянием кнопки.

Другие вопросы по тегам