トップページ > 記事閲覧
複数のゲームパッドが接続されている場合の優先順位について
名前:sereparu 日時: 2018/09/04 00:05

いつもお世話になっております。 PCに複数のゲームパッドを接続している場合の優先順位について確認させてください。 XInput形式のゲームパッド2個(以下、XInput_A、XInput_B)と DirectInput形式のゲームパッド1個(以下、DirectInput_A)の 合わせて3個のゲームパッドをPCに接続している状態で GetJoypadXInputState、GetJoypadDirectInputState、GetJoypadNameを呼び出すと 【 DX_INPUT_PAD1 】  ・GetJoypadXInputState   … 成功(0)  ・GetJoypadDirectInputState … 成功(0)  ・GetJoypadName      … 「Controller (XBOX 360 For Windows)」というデバイス名が取得される 【 DX_INPUT_PAD2 】  ・GetJoypadXInputState   … 成功(0)  ・GetJoypadDirectInputState … 成功(0)  ・GetJoypadName      … 「Controller (XBOX 360 For Windows)」というデバイス名が取得される 【 DX_INPUT_PAD3 】  ・GetJoypadXInputState   … 失敗(-1)  ・GetJoypadDirectInputState … 成功(0)  ・GetJoypadName      … XInput_Aのデバイス名が取得される 【 DX_INPUT_PAD4 】  ・GetJoypadXInputState   … 失敗(-1)  ・GetJoypadDirectInputState … 成功(0)  ・GetJoypadName      … XInput_Bのデバイス名が取得される 【 DX_INPUT_PAD5 】  ・GetJoypadXInputState   … 失敗(-1)  ・GetJoypadDirectInputState … 成功(0)  ・GetJoypadName      … DirectInput_Aのデバイス名が取得される というように、XInput形式のゲームパッド1個の情報は2つのInputTypeに割り当てられていて GetJoypadXInputState、GetJoypadDirectInputStateともに成功になるXInput形式のゲームパッドの情報が 優先的に若い番号のInputTypeに割り当てられ、それに続いて、GetJoypadDirectInputStateのみ成功する XInput形式のゲームパッドの情報が割り当てられ、その後に、DirectInput形式のゲームパッドの情報が 割り当てられる、という結果になりました。 このような割り当ての優先順位はDXライブラリの仕様でしょうか? ゲームパッドの優先順位を変更する以下2つの方法を試してみましたが、上記の結果は変わりませんでした。 そのため、PC側の設定の問題ではないのでは、と思い質問させていただいた次第です。 【方法1】 「コントロールパネル」→「ハードウェアとサウンド」→「デバイスとプリンター」→ゲームパッドのアイコンを右クリック →「ゲームコントローラの設定」→「詳細設定」→優先デバイスを選択 【方法2】 すべてのゲームパッドのドライバを削除 → 再起動 → 優先させたいゲームパッドから順番に接続する 使用したゲームパッドと開発環境は以下の通りです。 ・ゲームパッド ELECOM JC-U4113SWH Microsoft Xbox One Controller + Cable for Windows iBUFFALO レトロ調 USBゲームパッド 8ボタンタイプ BSGP801GY ・開発環境 VisualStudio2017 Community DXライブラリバージョン:3.19d OS:Windows7(64bit) Home 以上です。よろしくお願い致します。
メンテ

Page: 1 |

Re: 複数のゲームパッドが接続されている場合の優先順位について ( No.1 )
名前:管理人 日時:2018/09/04 01:07

> このような割り当ての優先順位はDXライブラリの仕様でしょうか? はい、仕様となります XInput と DirectInput はそれぞれ別の API で、XInput対応のゲームパッドは DirectInput にも対応しているので、 XInput 対応のゲームパッドを検出 → DirectInput 対応のゲームパッドを検出 の順で処理を行うと、XInput 対応のゲームパッドが DirectInput 対応のゲームパッドとしても検出されるので、 結果として1つのゲームパッドが2つのパッドとして認識されてしまいます…( DirectInput でも検出された際に それが XInput のゲームパッドとして既に検出されたゲームパッドなのかどうかを判断する術がないのです… ) DxLib_Init を呼び出す前に SetUseXInputFlag( FALSE ); を実行することで『XInput 対応のゲームパッドを検出』の 処理がスキップされ、( GetJoypadXInputState は使用できなくなってしまいますが )XInput と DirectInput で 2回検出されてしまうということが防げますので、よろしければお使いください m(_ _;m
メンテ
Re: 複数のゲームパッドが接続されている場合の優先順位について ( No.2 )
名前:sereparu(解決) 日時:2018/09/04 18:46

管理人さん いつも迅速なご回答、誠にありがとうございます。 > DirectInput でも検出された際にそれが XInput のゲームパッドとして既に検出されたゲームパッドなのかどうかを判断する術がないのです XInputのゲームパッドとして既に検出されたゲームパッドが、何番目にDirectInputでも検出されるかは固定ではなく 順番は保証されないということですね。 「SetUseXInputFlag( FALSE );」を実行する手も考えましたが、GetJoypadDirectInputStateだと、LRトリガーが 正常に取得できないので、GetJoypadXInputStateとGetJoypadDirectInputStateを使い分ける方法を考えています。 PCに接続しているゲームパッドを1個操作するごとにfor文でDX_INPUT_PAD1〜DX_INPUT_PAD16までのInputTypeを GetJoypadXInputState、GetJoypadDirectInputStateに渡して、どちらとも成功したInputTypeをXInputゲームパッドのXInputの情報 GetJoypadDirectInputStateのみ成功したInputTypeをXInputゲームパッドのDirectInputの情報として記録する というような判定が必要になりそうです。 仕様を確認でき、制作の方向性が見えてきたので、解決とさせていただきます。 ありがとうございました。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存