トップページ > 過去ログ > 記事閲覧
複数のジョイスティックの認識がおかしい?
名前:ZAP 日時: 2007/11/25 09:14

GetJoypadInputStateについて質問させていただきます。 当方ではジョイスティックを2本接続しており、コントロールパネル上では、 4ボタンのゲームパッド(標準ゲームポート):(コントローラID1) USB Dual Vibration Joystick(プレステ変換):(コントローラID2) という順でインストールされています。 このとき、プログラム上で key=GetJoypadInputState(DX_INPUT_PAD1)とすると、keyには コントローラID1である「4ボタンのゲームパッド」の入力値が返ってきます。 しかし、「USB Dual〜」のほうのパッドで操作したいと思い、 コントロールパネル上でコントローラIDを逆にしてからプログラムを実行すると、 当然IDを1にした「USB Dual〜」の入力値が返ってくるのかと思いきや、 ID2の「4ボタンのジョイスティック」の入力値が返ってきます。 4ボタンのゲームパッドを抜いて「USB Dual〜」一本だけにすれば問題なく入力値を得られるのですが、 これでは2本を常時挿した状態での解決になっていないのでご質問させて頂きます。 どのような原因が考えられますでしょうか? DXライブラリのバージョンはBCC版のVer 2.23です。 ちなみに、その他のソフトや自作のプログラム(HSP製)では コントローラーIDを入れ替えると入れ替えたとおりに認識しますので ハードの問題ではないようです。

Page: 1 |

Re: 複数のジョイスティックの認識がおかしい? ( No.1 )
名前:ZAP 日時:2007/11/25 09:32

その後調査したところ、どうやらDXライブラリ製のソフト全てで同じ状況のようです。 (14歳からはじめるCの本のCD-ROMに収録された コンパイル済みサンプルでも同様の結果が・・・) HSPで組んでいる分にはこの現象は発生しなかったので気づかなかったのですが、 当方の環境に問題があるのかもしれません(^^;
Re: 複数のジョイスティックの認識がおかしい? ( No.2 )
名前:ZAP 日時:2007/11/25 12:25

ちなみにlog.txtからの抜粋です。 ジョイスティックIDを入れ替えても、全く同じログが出力されています。 初期化時、ジョイスティックIDとは無関係に、4ボタンのゲームパッドが先に見つかって、 PAD1として登録されているのでしょうか? 354:DirectInput関係初期化処理 354: DirectInput7 の取得中... 成功 401: 引き続き初期化処理... 初期化成功 402: ジョイパッドの初期化... 426: 入力装置を見つけました 435: デバイスの登録名:4 ボタンのゲーム パッド 435: デバイスの製品登録名:4 ボタンのゲーム パッド 436: 周期的エフェクトの作成に失敗しました。 437: ジョイパッドの追加は正常に終了しました 443: 入力装置を見つけました 447: デバイスの登録名:USB Dual Vibration Joystick - Single 448: デバイスの製品登録名:USB Dual Vibration Joystick - Single 457: ジョイパッドの追加は正常に終了しました 458: ジョイパッドの初期化は正常に終了しました 458: マウスデバイスの初期化... 初期化成功 459: キーボードデバイスの初期化... 初期化成功 461:DirectInput 関連の初期化は正常に終了しました
Re: 複数のジョイスティックの認識がおかしい? ( No.3 )
名前:管理人 日時:2007/12/03 01:58

 こちらで少し調べてみたのですが、DirectInput 以外のパッド入力状態を取得するAPIを 使用した場合はコントロールパネル上で設定できるコントローラIDが反映されているですが、 どうやら DirectInput を使用した場合はコントローラIDとは関係なく、検出されている 順番通りでしかパッドは列挙されないようです。  何らかの方法で検出されたパッドに割り当てられているコントローラIDを取得できない ものかと調べてみたのですが、私が探した限りではその手段が見つかりませんでした。 ( DirectInput を使用する場合は「コントローラID1が割り当てられているパッドの 入力を取得、2が割り当てられているパッドの入力を取得・・・」という形態ではなく、 初期化時に DirectInput に対して「接続されているパッドを全部列挙して」とお願いして、 接続されているパッドがコールバック関数経由で飛ばしてもらうという形態となっていて、 そのときコールバック関数の引数として渡されるパッドの情報からはコントローラIDが 取得出来ない状態となっています)  イース等の有名タイトルでもコントローラIDの設定は反映されていないようですので、 やはり DirectInput を使用する場合はコントローラIDの設定を反映させることは出来ない のかもしれません。  DXライブラリの場合は DxLib_Init 関数を呼ぶ前に DirectInput を使用するかどうかを 設定する関数 SetUseDirectInputFlag 関数に FALSE を渡して呼んでおくことで入力処理に DirectInput を使用しないようにすることが出来ますので、もしコントローラIDの設定が 反映されないことで何か不都合がある場合は SetUseDirectInputFlag 関数をお使いに なってみてください。
Re: 複数のジョイスティックの認識がおかしい? ( No.4 )
名前:ZAP 日時:2007/12/03 13:34

管理人さま お調べいただいたうえに対応策までご提示頂き、ありがとうございました。 DirectInputの仕様だったんですね。勉強になりました。 しかし、この仕様でなんの不満も聞こえてこないということは、 ジョイスティック複数の環境って思った以上に少ないんでしょうなあ。
Re: 複数のジョイスティックの認識がおかしい? ( No.5 )
名前:通りすがり 日時:2007/12/04 17:36

ちょうど複数のパッドを使うことを想定したゲームを作ろうとしていたところでしたので、 このトピックは寝耳に水でした。 プログラム部分でどうにか出来る問題ではありますが、それでも不便な仕様ですね・・・ 古いファミコンゲームみたいに、起動時にパッドから入力信号を出させてIDアサインさせようかなと考えてます。
Re: 複数のジョイスティックの認識がおかしい? ( No.6 )
名前:ななし 日時:2007/12/23 10:59

横レスです。 >しかし、この仕様でなんの不満も聞こえてこないということは、 >ジョイスティック複数の環境って思った以上に少ないんでしょうなあ。 コントローラ接続では有名?なJoyToKeyはコントローラIDに追従していないと思われます(以前よりコントローラIDを追いかけてくれる変換ソフトを探しています)。 複数接続はあんまし需要がないのかも・・・。

Page: 1 |