トップページ > 記事閲覧
パッドでアナログOFFで右軸でPAD_INPUTが取得できる
名前:スー 日時: 2013/10/14 23:33

こんばんわ。はじめまして。 ジョイパッドのアナログについてお聞きしたいことがあります。 ジョイパッドでアナログモードをOFF(コントローラの真ん中が光っていない状態)にした際に、右ステッィクを操作するとPAD_INPUT_1やPAD_INPUT_2が取得できてしまいます。 これの回避策を教えて頂けませんか? できればアナログがOFFかつスティックを操作した際にはGetJoypadInputState( DX_INPUT_PAD1 )関数に反応させない方法があれば大変ありがたいです。 お手数をお掛けしますが、どうぞよろしくお願いします。 ●ソースコード #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){ ChangeWindowMode(TRUE); if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1; while(!ProcessMessage() && !ClearDrawScreen()){ int PadInput = GetJoypadInputState( DX_INPUT_KEY_PAD1 ) ; if( ( GetJoypadInputState( DX_INPUT_PAD1 ) & PAD_INPUT_1 ) == 0 ){ // 押されていない } else { //アナログOFFかつ右スティックを上に操作すると、ここにくる DrawString( 150 , 240 - 32 , "PAD_INPUT_1が押されました" , 0xff0000 ); } ScreenFlip(); } DxLib_End(); return 0; } ●環境 Windows7 Pro(64bit) VS2010 ●ログ 0:システムの情報を出力します 2: DXライブラリ Ver3.11 3: 論理プロセッサの数 : 4 4: OS Windows7 ( Build 7601 Service Pack 1 ) 105: CPU動作速度:大体3.00GHz 106: MMX命令を使用します 108: SSE命令が使用可能です 109: SSE2命令が使用可能です 110: CPUベンダ:GenuineIntel 113: CPU名: Intel(R) Core(TM) i5-2320 CPU @ 3.00GHz 114:COMの初期化... 成功しました 127:メモリ総量:16360.89MB 空きメモリ領域:12023.82MB 129:タイマーの精度を検査します 130:精度結果 更新回数 マルチメディアタイマー:0 パフォーマンスカウンター:60 131: パフォーマンスカウンターを使用します タイマー精度 : 2939.316000 KHz 132: ソフトの二重起動検査... 二重起動はされていませんでした 134:ウインドウクラスを登録します... 登録に成功しました 135:ウインドウモード起動用のウインドウを作成します 139:ウインドウの作成に成功しました 140:ウインドウを表示します 205:IMEを無効にしました 207:ウインドウスタイルをウインドウモード用に変更します... 完了 231:DirectInput関係初期化処理 232: XInput DLL の読み込み中... 成功 241: DirectInput7 の取得中... 成功 294: 引き続き初期化処理... 初期化成功 297: ジョイパッドの初期化... 343: 入力装置を見つけました 344: デバイスの登録名:PC Game Controller 345: デバイスの製品登録名:PC Game Controller 346: 周期的エフェクトの作成に失敗しました。 348: ジョイパッドの追加は正常に終了しました 348: ジョイパッドの初期化は正常に終了しました 349: マウスデバイスの初期化... 初期化成功 350: キーボードデバイスの初期化... 初期化成功 352:DirectInput 関連の初期化は正常に終了しました 355:XAudio2 の初期化を行います 356: XAudio2 インターフェースの取得を行います.... 成功 Ver2.7 360: 引き続きインターフェースの初期化処理... 成功 361: X3DAudio.DLL の読み込み中... 成功 391: デバイス名:スピーカー (SB X-Fi Go! Pro) 392: チャンネル数:2 393: ビット精度:16bit 394: サンプリングレート:44100Hz 396:XAudio2 の初期化は正常に終了しました 402:DirectDraw オブジェクトの取得を行います.... 成功 409:引き続き初期化処理... 初期化に成功しました 447:IDirect3D9Ex オブジェクトを取得します.... 成功 450:IDirect3DDevice9Ex オブジェクトを取得します.... ハードウエア頂点演算を使用します 711:成功 713:Driver:nvd3dum.dll Description:NVIDIA GeForce GTX 650 714:画面のフォーマットは D3DFMT_X8R8G8B8 です 715:16bit Zバッファフォーマットは D3DFMT_D16 です 715:24bit Zバッファフォーマットは D3DFMT_D24X8 です 716:32bit Zバッファフォーマットは D3DFMT_D24X8 です 717:16bit カラーフォーマットは D3DFMT_R5G6B5 です 717:32bit カラーフォーマットは D3DFMT_X8R8G8B8 です 718:アルファ付き 16bit カラーフォーマットは D3DFMT_A4R4G4B4 です 719:アルファ付き 32bit カラーフォーマットは D3DFMT_A8R8G8B8 です 719:アルファテスト用 16bit カラーフォーマットは D3DFMT_A1R5G5B5 です 720:アルファテスト用 32bit カラーフォーマットは D3DFMT_A8R8G8B8 です 721:DXT1テクスチャフォーマットはD3DFMT_DXT1 です 722:DXT2テクスチャフォーマットはD3DFMT_DXT2 です 722:DXT3テクスチャフォーマットはD3DFMT_DXT3 です 723:DXT4テクスチャフォーマットはD3DFMT_DXT4 です 724:DXT5テクスチャフォーマットはD3DFMT_DXT5 です 724:描画用 16bit カラーフォーマットは D3DFMT_R5G5B5 です 725:描画用 32bit カラーフォーマットは D3DFMT_X8R8G8B8 です 726:描画用アルファ付き 32bit カラーフォーマットは D3DFMT_A8R8G8B8 です 726:描画用ABGR整数16ビット型カラーフォーマットは D3DFMT_A16B16G16R16 です 727:描画用ABGR浮動小数点16ビット型カラーフォーマットは D3DFMT_A16B16G16R16F です 728:描画用ABGR浮動小数点32ビット型カラーフォーマットは D3DFMT_A32B32G32R32F です 729:描画用1チャンネル整数8ビット型カラーフォーマットは D3DFMT_L8 です 729:描画用1チャンネル整数16ビット型カラーフォーマットは D3DFMT_L16 です 730:描画用1チャンネル浮動小数点16ビット型カラーフォーマットは D3DFMT_R16F です 731:描画用1チャンネル浮動小数点32ビット型カラーフォーマットは D3DFMT_R32F です 732:描画用2チャンネル整数8ビット型カラーフォーマットは D3DFMT_A8B8G8R8 です 733:描画用2チャンネル整数16ビット型カラーフォーマットは D3DFMT_G16R16 です 733:描画用2チャンネル浮動小数点16ビット型カラーフォーマットは D3DFMT_G16R16F です 734:描画用2チャンネル浮動小数点32ビット型カラーフォーマットは D3DFMT_G32R32F です 735:一度に描画できるプリミティブの最大数:16777215 735:対応している最大頂点インデックス:16777215 736:同時にレンダリングできるバッファの数:4 736:最大テクスチャサイズ 幅:8192 高さ:8192 737:テクスチャステージテンポラリレジスタ:使用可 738:減算合成のハードウェア対応:ネイティブ 738:ハードウェア頂点シェーダーバージョンコード:300 739:エミュレーション頂点シェーダーバージョンコード:エミュレーション無し 740:ピクセルシェーダーバージョンコード:300 746:バックバッファロック転送の時間:62nsec 一時的な描画可能バッファを使用した転送の時間:707nsec 747:バックバッファロックを使用します 748:Zバッファを作成します.... 成功 781:プログラマブルシェーダーを使用します 831:フォントの初期化を行います 835:フォントの初期化は正常に終了しました 850:文字コードバッファの初期化を行います... 完了しました 4161:ウインドウを閉じようとしています 4170:ウインドウが破棄されようとしています 4172:ソフトを終了する準備が整いました 4197:フォントの初期化を行います 4199:フォントの初期化は正常に終了しました 4209:Direct3DDevice9 の解放 2 4231:Direct3D9 DLL の解放 1 4234:DirectInput 関連の終了処理... 完了 4296: 4296:Alloc memory dump 4297: Total size:0(0.000kb) Alloc num:0 4298:
メンテ

Page: 1 |

Re: パッドでアナログOFFで右軸でPAD_INPUTが取得できる ( No.1 )
名前:管理人 日時:2013/10/15 00:27

PCのプログラムからはジョイパッドのアナログモードのON/OFF状態を取得する手段が無いので、 残念ながら回避することは無理だと思います 恐らくアナログモードOFF時には右スティックの入力がボタンに割り当てられているのではないかと思います ( 因みに、ジョイパッドは色々なメーカーから販売されているので、メーカーによって仕様が違います 例えば私の手元にあるジョイパッドでは、アナログモードがOFFの場合は右スティックを操作しても GetJoypadInputState( DX_INPUT_PAD1 ) の戻り値は 0 です ) こちらのプログラムを実行すると、DirectInput から得られるジョイパッドの入力情報を丸ごと画面に 表示できますので、アナログモードOFF時の右スティックの入力が何処に割り当てられているのか 確認してみてください #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { DINPUT_JOYSTATE input ; int i ; int Color ; // ウインドウモードで起動 ChangeWindowMode( TRUE ) ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) return -1 ; // 描画先を裏画面にする SetDrawScreen( DX_SCREEN_BACK ) ; // メインループ(何かキーが押されたらループを抜ける) while( ProcessMessage() == 0 ) { // 画面のクリア ClearDrawScreen() ; // 入力状態を取得 GetJoypadDirectInputState( DX_INPUT_PAD1, &input ) ; // 画面に構造体の中身を描画 Color = GetColor( 255,255,255 ) ; DrawFormatString( 0, 0, Color, "X:%d Y:%d Z:%d", input.X, input.Y, input.Z ) ; DrawFormatString( 0, 16, Color, "Rx:%d Ry:%d Rz:%d", input.Rx, input.Ry, input.Rz ) ; DrawFormatString( 0, 32, Color, "Slider 0:%d 1:%d", input.Slider[ 0 ], input.Slider[ 1 ] ) ; DrawFormatString( 0, 48, Color, "POV 0:%d 1:%d 2:%d 3:%d", input.POV[ 0 ], input.POV[ 1 ], input.POV[ 2 ], input.POV[ 3 ] ) ; DrawString( 0, 64, "Button", Color ) ; for( i = 0 ; i < 32 ; i ++ ) { DrawFormatString( 64 + i % 8 * 64, 64 + i / 8 * 16, Color, "%2d:%d", i, input.Buttons[ i ] ) ; } // 裏画面の内容を表画面に反映 ScreenFlip() ; } // DXライブラリの後始末 DxLib_End() ; // ソフトの終了 return 0; }
メンテ
Re: パッドでアナログOFFで右軸でPAD_INPUTが取得できる ( No.2 )
名前:スー 日時:2013/10/15 00:35

管理人さん。 お早い回答ありがとうございます。 教えていただいたサンプルプログラムで確認した所、アナログOFFの場合、右スティックがボタン1〜ボタン4までに割り当てられていました。 ソフト側では対応無理ということですので、今回は諦めます。 ありがとうございました。
メンテ

Page: 1 |

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

   クッキー保存