お世話になります ジョイパッド接続についての相談( バグ報告? )なのですが ジョイパッドを2つ用意して( 仮に A, B ) としまして 2つしか接続していないのに GetJoypadNum で得られる値が 3 になる現象が起こったのでご相談させてください まず、あらかじめ2つのパッドをPCに接続した状態でゲームを立ち上げると GetJoypadNum で得られる値は正常値の 2 なのですが A をあらかじめ接続している状態 ( この段階では GetJoypadNum は 1 ) で、 ゲームを立ち上げてから B を接続すると GetJoypadNum が 3 になり、 B の接続を切ると A しか接続していないのに GetJoypadNum が 2 になってしまいます こちらで使用しているジョイパッドが A はワイヤレスの XBox 純正コントローラ と B は非純正品のコード接続コントローラ ですのでそのせいも考えられるのですが、PC に接続する順番を A, B 入れ替えても同様の現象が発生しているので これはもしやと思いご報告させて頂きました。 ※ B の接続を切って GetJoypadNum が 2 の状態で GetJoypadDirectInputState( 1, &joystate ) を実行すると A の情報を取得してしまうようです ※ こちらで所持しているパッドが2つしかなく、3つ以上のテストはできておりません こちらで取れる対応策などありましたらお教えいただければと思います よろしくお願い致します
追記 DirectInput ではなく XInput に切り替えた所 GetJoypadXInputState で得られる情報の混濁はなくなったので こちらで対応しようとおもいます。 ただ、GetJoypadNum で得られる値は XInput にしても 3 になるようでした
手元の環境で純正のXBoxコントローラと非純正のコントローラを実行中に接続したり 外したりしてみましたが、『2つしか接続していないのに GetJoypadNum の戻り値が 3 となる』ことはありませんでした <テストで使用したプログラム> #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { // ウインドウモードで起動 ChangeWindowMode( TRUE ) ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) return -1 ; // 描画先を裏画面にする SetDrawScreen( DX_SCREEN_BACK ) ; // メインループ while( ProcessMessage() == 0 ) { // 画面のクリア ClearDrawScreen() ; // 接続されているパッド数を描画 DrawFormatString( 0, 0, GetColor( 255,255,255 ), "PadNum:%d", GetJoypadNum() ) ; // 裏画面の内容を表画面に反映 ScreenFlip() ; } // DXライブラリの後始末 DxLib_End() ; // ソフトの終了 return 0 ; } 私の手元にある暫定最新版では直っているかもしれませんので、 よろしければこちらの暫定最新版をお試しになってみてください m(_ _)m https://dxlib.xsrv.jp/temp/DxLibVCTest.zip // Windows版 VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.zip // Windows版 BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCC2Test.zip // Windows版 C++ Builder 12 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.zip // Windows版 MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.zip // ソース (中身を既存のライブラリのファイルに上書きして『リビルド』をして下さい)
お返事ありがとうございます 最新版に差し替えたところ、正常に動作することが確認できました ありがとうございました