2016-08-03 17 views
-2

UWPのGamePadクラスを使用してモニターされたコントローラーから受信した入力を取得して更新するためのベストプラクティスについてはわかりません。UWPアプリケーションのコントローラー入力をポーリングする方法

私はGamePadAddedイベント内でDispatch Timerと非同期ループを使用している人の例をいくつか見てきました。 Win32アプリケーションでは、WinMainの更新/メッセージループで入力を処理していましたが、UWPアプリケーションでは何も似ていません。

Win32アプリケーションのように入力を収集/処理する必要があるループがUWPアプリケーションにありますか?入力デバイス(名目上はXbox Oneコントローラ)からの入力のポーリングに推奨されるプロトコルは何ですか?

私はUWPアプリケーション開発についてさらに詳しくお読みになりたいと思いますが、このようなことを参照するガイドは不明です。

編集:ダウンボートと移動の代わりに、なぜこの質問がダウンボートに値するのかについての考えを共有すると、生産性が高くなります。

答えて

2

私はGamePadAddedイベント

これは、ゲームパッドのデータを読み込むためのUWPアプリで正しい方法です内派遣タイマーと非同期ループを使用している人々の例のカップルを見てきました。 UIを頻繁に更新する必要がある場合は、UIスレッドにループの読み込み部分を移動してください。 UWPのループがあります。このblog

でソリューションを参照してください入力はあなたは、カスタムイベントでラッパーを作るオープンソース実装を見ることができる/収集のWin32でのように扱わ

をアプリべきであることをアプリ:XBoxGamepad

public class XBoxGamepad 
{ 
    private List<Gamepad> _controllers = new List<Gamepad>(); 
    private bool _running = true; 

    Task backgroundWorkTask; 

    public event EventHandler<GamepadButtons> OnXBoxGamepadButtonPressA; 
    //omitted...... 

    public XBoxGamepad() 
    { 
     Gamepad.GamepadAdded += Gamepad_GamepadAdded; 
     Gamepad.GamepadRemoved += Gamepad_GamepadRemoved; 
     backgroundWorkTask = Task.Run(() => PollGamepad()); 
    } 

    //omitted...... 

    private void Start() 
    { 
     _running = true; 
    } 

    public void Stop() 
    { 
     _running = false; 
    } 

    public async Task PollGamepad() 
    { 
     while (true) 
     { 
      if (_running) 
      { 
       foreach (Gamepad controller in _controllers) 
       { 
        if (controller.GetCurrentReading().Buttons == GamepadButtons.A) 
        { 
         OnXBoxGamepadButtonPressA(controller, controller.GetCurrentReading().Buttons); 
        } 
        //omitted...... 
       } 
      } 
      await Task.Delay(50); 
     } 
    } 

    private void Gamepad_GamepadRemoved(object sender, Gamepad e) 
    { 
     _controllers.Remove(e); 
    } 

    private void Gamepad_GamepadAdded(object sender, Gamepad e) 
    { 
     _controllers.Add(e); 
    } 
    } 
関連する問題