Я пытаюсь использовать геймпад для управления приложением. Это не игра, а простое приложение, использующее Windows Forms. Так что у него нет игрового цикла/процесса обновления или чего-то подобного. Я не хотел бы использовать XNA, потому что я думаю, что это огромная перегрузка только для захвата нажатия кнопки.
Я экспериментирую как с SlimDX, так и с SharpDX. Я так понимаю, это просто обертки для DirectX, да?
Глядя на документацию, кажется, что нет события для нажатия кнопки. Поэтому я искал альтернативу. Я попытался добавить таймер (из класса System.Windows.Forms.Timer) и прочитать состояние геймпада следующим образом:
private void timer_tick(object sender, EventArgs e)
{
State s = controller.GetState();
stateLabel.Text = s.Gamepad.Buttons == GamepadButtonFlags.A ? "A" : "";
}
При достаточно маленьком интервале между тиками таймера (у меня 10 мс) я вижу, нажата кнопка или нет. Однако я не хочу обрабатывать нажатие кнопки несколько раз, если кнопка удерживается нажатой - мне нужно убедиться, что она была отпущена, прежде чем снова обрабатывать нажатие кнопки. Между двумя тиками таймера я не знаю, была ли кнопка нажата дважды или ее просто удерживали.
Я думал об использовании номера пакета в состоянии контроллера, но он будет меняться при малейшем прикосновении к аналоговому стику или плечевому триггеру.
Помощь?
bool
способы помогут вам начать работу. - person bubbinator   schedule 23.03.2014