トップページ > 過去ログ > 記事閲覧
Xbox360用アーケードスティックの認識について
名前:Mやん 日時: 2012/11/08 16:29

いつもお世話になっております。 早速質問なのですが、製作中の格闘ゲームでアーケードスティックを利用したいと思い HORI製のXbox360用リアルアーケードPro.VX SAを接続してみたところ以下のような状態になりました。 1.GetJoypadNum()の戻り値が常に16になる。  別スロットにあるPSコントーラーのコンバータを抜き差ししても値は16のまま変わりませんでした。  PSコントーラーだけだと1になります。 2.GetJoypadInputState()の戻り値にPAD_INPUT_LEFTとPAD_INPUT_UPが入り続けスティックによる入力を受け付けない。  GetJoypadDirectInputState()で確認してみたところDINPUT_JOYSTATEのXとYに常に-1000が入っていました。  ちなみにボタンは正常に認識されているようで入力も有効です。  またOSのゲームコントローラーのプロパティ→テストの項目ではスティックを動かすとハットスイッチ(POV)のところに反応があり入力は正しく認識されているようです。  ただ気になるのはPSコントローラーのテスト時には表示されている"軸"の項目が無いことでしょうか。  PSコントローラーではアナログOFFで十字キーが軸に、ONだと十字キーがハットスイッチでアナログが軸に割り当てられる様です。 これらの症状はライブラリ側の問題である可能性はありますでしょうか? 色々と入力周りを試行錯誤してみたものの解決に至らずこちらに投稿させていただきました。 ・開発環境 Windows8 Pro 64bit Microsoft Visual Studio Express 2012 for Windows Desktop DXライブラリ VisualC#用(Ver3.08e) 以上よろしくお願いします。

Page: 1 |

Re: Xbox360用アーケードスティックの認識について ( No.1 )
名前:Mやん 日時:2012/11/10 11:56

正確でない部分があったので追記します。 1についてですが、よくよく調べてみるとDxLib_Init()の前でSetUseDirectInputFlag()をFALSEに設定するだけで常に16になってしまうようです。 他のスレッドなどを拝見したところVISTA以降ではデフォルトでFALSEになっているとのことでしたが、当該アーケードスティックがデフォルトやTRUEの 呼び出しでは認識されなかったため明示的にFALSEで呼び出すようにしています。 ここがまずかったりするのでしょうか… あと関係あるかわかりませんがSetUseDirectInputFlag()をFALSEに設定した場合、実際に存在しないコントローラー番号に対して GetJoypadInputState()やGetJoypadDirectInputState()を呼び出すとかなりの処理負荷がかかるみたいです。
Re: Xbox360用アーケードスティックの認識について ( No.2 )
名前:管理人 日時:2012/11/10 17:18

すみません、Vista以降でデフォルトで DirectInput を使用しないのはキーボードのみでした なので Vista以降でもキーボード以外はデフォルトでは DirectInput を使用しようとします SetUseDirectInputFlag( FALSE ) の際に GetJoypadNum の戻り値が必ず 16 になってしまう原因と 存在しないコントローラー番号に対して GetJoypadInputState などの入力取得関数を使用すると 処理負荷が高くなる原因は分かり、修正できました( 両方とも同じ原因でした ) ただ、XとYが常に-1000が入ってしまう原因と、DirectInput を使用した際に アーケードスティックが認識されない原因は分かりません・・・ よろしければデフォルト設定で起動した際の、実行時に作成されるログファイル( Log.txt )の内容を こちらの掲示板に貼り付けて頂けないでしょうか? あと、とりあえず GetJoypadNum の戻り値を修正したバージョンをこちらにアップしましたので よろしければお試しになってみてください m(_ _;m http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibGCC_DevCppTest.exe // Dev-C++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibGCC_MinGWTest.exe // MinGW 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibDotNet.zip // .NET用 http://homepage2.nifty.com/natupaji/DxLib/DxLibMakeTest.exe // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい)
Re: Xbox360用アーケードスティックの認識について ( No.3 )
名前:Mやん 日時:2012/11/10 19:40

早速の対応ありがとうございます。 修正版でデフォルト設定のログが以下になります。 0:システムの情報を出力します 0: DXライブラリ Ver3.08f 1: 論理プロセッサの数 : 8 1: OS Windows ( Build 9200 ) 101: CPU動作速度:大体2.78GHz 101: MMX命令を使用します 101: SSE命令が使用可能です 101: SSE2命令が使用可能です 102: CPUベンダ:GenuineIntel 103: CPU名:Intel(R) Core(TM) i7 CPU 860 @ 2.80GHz 103:COMの初期化... 成功しました 103:メモリ総量:4096.00MB 空きメモリ領域:4096.00MB 103:タイマーの精度を検査します 104:精度結果 更新回数 マルチメディアタイマー:0 パフォーマンスカウンター:60 104: パフォーマンスカウンターを使用します タイマー精度 : 2732.431000 KHz 104: ソフトの二重起動検査... 二重起動はされていませんでした 105:ウインドウクラスを登録します... 登録に成功しました 105:ウインドウモード起動用のウインドウを作成します 106:ウインドウの作成に成功しました 107:ウインドウを表示します 110:IMEを無効にしました 110:ウインドウスタイルをウインドウモード用に変更します... 完了 130:DirectInput関係初期化処理 130: DirectInput7 の取得中... 成功 140: 引き続き初期化処理... 初期化成功 141: ジョイパッドの初期化... 149: 入力装置を見つけました 149: デバイスの登録名:Arcade Stick (REAL ARCADE Pro.VX) 150: デバイスの製品登録名:Arcade Stick (REAL ARCADE Pro.VX) 150: ジョイパッドデバイスのX軸関係の設定に失敗しました 150: ジョイパッドの初期化は正常に終了しました 150: マウスデバイスの初期化... 初期化成功 151: キーボードデバイスの初期化... 初期化成功 152:DirectInput 関連の初期化は正常に終了しました 152:DirectSound の初期化を行います 153:DirectSound インターフェースの取得を行います.... 成功 154:引き続きインターフェースの初期化処理... 成功 201: DirectSound デバイスを列挙します 202: モジュール名: ドライバ記述:プライマリ サウンド ドライバー 202: モジュール名:{0.0.0.00000000}.{53a6ea9f-c514-44cc-95ac-5f3f7dd37a9a} ドライバ記述:SPDIF インターフェイス (Kripton USB Audio) 202: モジュール名:{0.0.0.00000000}.{4c4cbcd4-d964-4c25-80b5-a4a72d484b23} ドライバ記述:AMD HDMI Output (AMD High Definition Audio Device) 202: モジュール名:{0.0.0.00000000}.{a61b684e-ac7b-4843-824a-fbbc8e631be2} ドライバ記述:デジタル オーディオ (S/PDIF) (High Definition Audio デバイス) 203: モジュール名:{0.0.0.00000000}.{b22d1eb4-8aea-4a31-82bc-2990e18588fe} ドライバ記述:スピーカー (Envy24 Family Audio Controller WDM) 203: モジュール名:{0.0.0.00000000}.{b7a3bdc4-5ea4-4513-be88-037d1390e8bd} ドライバ記述:デジタル オーディオ (S/PDIF) (Envy24 Family Audio Controller WDM) 203: モジュール名:{0.0.0.00000000}.{cf09402f-d681-415a-921b-5ce92ef48135} ドライバ記述:デジタル オーディオ (S/PDIF) (High Definition Audio デバイス) 203: モジュール名:{0.0.0.00000000}.{f03f4687-131f-470f-b274-bb6fc3de77a9} ドライバ記述:スピーカー (High Definition Audio デバイス) 204: 最大サンプリングレート:200.00KHz 最小サンプリングレート:0.10KHz 204: 総サウンドメモリ領域:0.00KB 空きサウンドメモリ領域:0.00KB 204: 利用可能サンプリング精度 204: プライマリ 16bit = OK 8bit = OK 205: セカンダリ 16bit = OK 8bit = OK 205: 利用可能チャンネル 205: プライマリ MONO = OK STEREO = OK 205: セカンダリ MONO = OK STEREO = OK 206:DirectSound の初期化は正常に終了しました 207:DirectDraw オブジェクトの取得を行います.... 成功 209:引き続き初期化処理... 初期化に成功しました 319:IDirect3D9Ex オブジェクトを取得します.... 成功 333:IDirect3DDevice9Ex オブジェクトを取得します.... ハードウエア頂点演算を使用します 665:成功 666:Driver:aticfx32.dll Description:ATI Radeon HD 5800 Series 666:画面のフォーマットは D3DFMT_X8R8G8B8 です 666:Zバッファのフォーマットは D3DFMT_D16 です 667:16bit カラーフォーマットは D3DFMT_R5G6B5 です 667:32bit カラーフォーマットは D3DFMT_X8R8G8B8 です 667:アルファ付き 16bit カラーフォーマットは D3DFMT_A4R4G4B4 です 667:アルファ付き 32bit カラーフォーマットは D3DFMT_A8R8G8B8 です 668:アルファテスト用 16bit カラーフォーマットは D3DFMT_A1R5G5B5 です 668:アルファテスト用 32bit カラーフォーマットは D3DFMT_A8R8G8B8 です 668:DXT1テクスチャフォーマットはD3DFMT_DXT1 です 668:DXT2テクスチャフォーマットは D_D3DFMT_DXT2 です 669:DXT3テクスチャフォーマットはD3DFMT_DXT3 です 669:DXT4テクスチャフォーマットはD3DFMT_DXT4 です 669:DXT5テクスチャフォーマットはD3DFMT_DXT5 です 670:描画用 16bit カラーフォーマットは D3DFMT_R5G5B5 です 670:描画用 32bit カラーフォーマットは D3DFMT_X8R8G8B8 です 670:描画用アルファ付き 32bit カラーフォーマットは D3DFMT_A8R8G8B8 です 670:描画用ABGR整数16ビット型カラーフォーマットは D3DFMT_A16B16G16R16 です 671:描画用ABGR浮動小数点16ビット型カラーフォーマットは D3DFMT_A16B16G16R16F です 671:描画用ABGR浮動小数点32ビット型カラーフォーマットは D3DFMT_A32B32G32R32F です 671:描画用1チャンネル整数8ビット型カラーフォーマットは D3DFMT_A8R8G8B8 です 671:描画用1チャンネル整数16ビット型カラーフォーマットは D3DFMT_G16R16 です 672:描画用1チャンネル浮動小数点16ビット型カラーフォーマットは D3DFMT_R16F です 672:描画用1チャンネル浮動小数点32ビット型カラーフォーマットは D3DFMT_R32F です 672:描画用2チャンネル整数8ビット型カラーフォーマットは D3DFMT_A8B8G8R8 です 672:描画用2チャンネル整数16ビット型カラーフォーマットは D3DFMT_G16R16 です 673:描画用2チャンネル浮動小数点16ビット型カラーフォーマットは D3DFMT_G16R16F です 673:描画用2チャンネル浮動小数点32ビット型カラーフォーマットは D3DFMT_G32R32F です 673:一度に描画できるプリミティブの最大数:5592405 673:対応している最大頂点インデックス:16777215 674:同時にレンダリングできるバッファの数:4 674:最大テクスチャサイズ 幅:16384 高さ:16384 674:テクスチャステージテンポラリレジスタ:使用可 674:減算合成のハードウェア対応:ネイティブ 675:ハードウェア頂点シェーダーバージョンコード:300 675:エミュレーション頂点シェーダーバージョンコード:エミュレーション無し 675:ピクセルシェーダーバージョンコード:300 734:バックバッファロック転送の時間:16665nsec 一時的な描画可能バッファを使用した転送の時間:696nsec 734:バックバッファロックを使用しません 734:Zバッファを作成します.... 成功 744:プログラマブルシェーダーを使用します 812:フォントの初期化を行います 813:フォントの初期化は正常に終了しました 820:文字コードバッファの初期化を行います... 完了しました 2417:フォントの初期化を行います 2418:フォントの初期化は正常に終了しました 2420:Direct3DDevice9 の解放 2 2469:Direct3D9 DLL の解放 1 2470:DirectInput 関連の終了処理... 完了 2503:DirectSound の終了処理は正常に終了しました 2503:ウインドウを閉じようとしています 2504:ウインドウが破棄されようとしています 2504:ソフトを終了する準備が整いました 2570: 2570:Alloc memory dump 2570: Total size:0(0.000kb) Alloc num:0 2570: 他に気を回しすぎてログ確認はうっかりしてました^^; それらしき出力がありますね・・
Re: Xbox360用アーケードスティックの認識について ( No.4 )
名前:管理人 日時:2012/11/10 22:12

ログを貼り付けて頂きありがとうございます お気づきの通り設定に失敗しているみたいです ただ、ログにある設定は一応しなくても動作させることはできるのですが、 そもそも設定をしなければ正常に動作するのかどうかを確かめなければならないので、 お手数で申し訳ありませんがログにある設定を行わないようにしたこちらのバージョンで 再度 GetJoypadDirectInputState の数値を確認して頂けないでしょうか? ( DirectInput を ON にした状態で・・・ ) https://dxlib.xsrv.jp/file/DxLibDotNetPADTest.zip もしこれでレバーの方向に従って値がちゃんと変化してくれるのでしたら、 エラーの原因となった設定を行わないで情報を取得するように処理を変更したいと思います
Re: Xbox360用アーケードスティックの認識について ( No.5 )
名前:Mやん 日時:2012/11/10 22:38

上記パージョンで GetJoypadDirectInputState を呼び出したところ DINPUT_JOYSTATE.POV0 の値が変化(未入力+8方向)するのが確認できました! これで行けそうです。
Re: Xbox360用アーケードスティックの認識について ( No.6 )
名前:管理人 日時:2012/11/11 01:19

なるほど、X軸、Y軸が無いから設定が失敗していたようです 軸に対する設定が失敗してもそのパッドを扱うことを放棄しないように処理を変更しましたので、 もしアーケードスティック以外のパッドも対応されるご予定でしたらこちらをお使いください m(_ _)m http://homepage2.nifty.com/natupaji/DxLib/DxLibDotNet.zip
Re: Xbox360用アーケードスティックの認識について ( No.7 )
名前:Mやん(解決) 日時:2012/11/11 02:23

最新バージョンでアーケードスティックとPSコントローラー両方の入力を正常に取得できるのを確認しました。 お忙しい中での対応本当にありがとうございました。

Page: 1 |