ゲームパッドを使用してアプリケーションを制御しようとしています。これはゲームではなく、Windows フォームを使用した単純なアプリケーションです。そのため、ゲーム ループ/更新プロセスなどはありません。ボタンの押下をキャプチャするだけでも膨大な負荷がかかるため、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" : "";
}
タイマーティックの間隔が十分に短い場合 (私は 10ms を使用しています)、ボタンが押されているかどうかを確認できます。ただし、ボタンを押したままにしておくと、ボタンを複数回押す必要はありません。もう一度ボタンを押す前に、ボタンが離されていることを確認する必要があります。タイマーの 2 つのティックの間に、ボタンが 2 回押されたのか、それとも単に押し下げられただけなのかわかりません。
コントローラーの状態でパケット番号を使おうと思ったのですが、アナログスティックやショルダートリガーのちょっとしたタッチで変わってしまいます。
ヘルプ?