トップページ > 過去ログ > 記事閲覧
ジョイパッドの入力状態
名前:ミルク 日時: 2009/12/14 02:18

初めまして。 どうしても分からないことがあるので質問させていただきます。 GetJoypadInputState(DX_INPUT_PAD1)を使用すると PAD1として認識されたジョイパッドの入力状態を取得できるのですが、 アナログレバーと十字キーの両方を取得することはできないのでしょうか。 というのも、私が使用しているジョイパッドはアナログモードと非アナログモードを切り替えれるタイプでして、アナログ時はレバーの状態はしっかり取得されていますが十字キーの状態が取得されません。 逆に、非アナログ時だと十字キーは取得されるのですがレバーは取得されませんでした。 モンスターハンターのように、レバーでキャラクターを移動させ、十字キーでカメラ操作を行うプログラムを制作しているので、何とか方法はないでしょうか。

Page: 1 |

Re: ジョイパッドの入力状態 ( No.1 )
名前:Will 日時:2009/12/15 09:44

確認ですが、そのパッドはアナログと十字キーを同時に認識できるつくりなんでしょうか? ハード的に駄目なものはソフトではどうしようもないですが・・・
Re: ジョイパッドの入力状態 ( No.2 )
名前:sy(サイ) 日時:2009/12/15 10:20

横やり失礼します。 僕はPSコントローラを差して使っていますが同様の事が起こります。 ハード的には両方の入力が同時に行けたはずです。 今のところ不便はありませんがこれはDXライブラリの仕様と思われます。
Re: ジョイパッドの入力状態 ( No.3 )
名前:ミルク 日時:2009/12/15 11:04

レスありがとうございます。 ジョイパッドはアナログと十字キーを同時に認識できます。 PS2のコントローラーをパソコンで使用できる変換機も所持していまして、それで確認しましたがやはり両方の入力状態を取得することはできませんでした。 PS2のコントローラーを変換機経由で使用。 バッファロー製のジョイパッド。 ロジクール製のジョイパッド。 以上の3つで確認しましたが全て同じ状態になってしまいます。 普段はモンスターハンターフロンティア推薦のロジクール製ジョイパッドを使用しています。
Re: ジョイパッドの入力状態 ( No.4 )
名前:rom1 日時:2009/12/15 22:31

アナログ・デジタル状態で十字キーの状態は違った気がするので、そこらへんが関係してるかもしれませんね・・ (POBだったかHATスイッチだったか。。
Re: ジョイパッドの入力状態 ( No.5 )
名前:ミルク 日時:2009/12/16 09:09

レスありがとうございます。 >>sy(サイ)様 そうですか…、DXライブラリの仕様であれば仕方ないのですかね…。 >>rom1様 過去の記事にPOVについて書かれたものがあったのですが、 私の理解力が至らず、いまひとつ分かりませんでした…。 もう少し調べてみようと思います。
Re: ジョイパッドの入力状態 ( No.6 )
名前:管理人 日時:2009/12/19 01:58

コントローラをアナログモードにした状態でしたら 左スティックの状態を GetJoypadAnalogInput 右スティックの状態を GetJoypadAnalogInputRight 十字キーの状態を非公開関数の GetJoypadPOVState で取得することができると思います 各入力がどの関数で取得できるかはドライバに依存しますが、 ちょっと調べた限りではみんな同じような仕様になっているようです 以下のプログラムでスティックや十時キーを入力すると画面に表示される値が 変化しますので、よろしければ参考にしてみてください #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int AX, AY, ARX, ARY ; int Pov ; // ウインドウモードで起動 ChangeWindowMode( TRUE ); // DXライブラリの初期化 if( DxLib_Init() < 0 ) return -1; // 描画先を裏画面にする SetDrawScreen( DX_SCREEN_BACK ); // メインループ(何かキーが押されたらループを抜ける) while( ProcessMessage() == 0 ) { // 画面のクリア ClearDrawScreen(); // 左右のアナログ入力状態とPOV状態を取得する GetJoypadAnalogInput( &AX, &AY, DX_INPUT_PAD1 ) ; GetJoypadAnalogInputRight( &ARX, &ARY, DX_INPUT_PAD1 ) ; Pov = GetJoypadPOVState( DX_INPUT_PAD1, 0 ) ; // 取得した内容を描画 DrawFormatString( 0, 0, GetColor( 255,255,255 ), "アナログスティック左 x:%d y:%d", AX, AY ) ; DrawFormatString( 0, 16, GetColor( 255,255,255 ), "アナログスティック右 x:%d y:%d", ARX, ARY ) ; DrawFormatString( 0, 32, GetColor( 255,255,255 ), "POV0 %d", Pov ) ; // 裏画面の内容を表画面に反映 ScreenFlip(); } // DXライブラリの後始末 DxLib_End(); // ソフトの終了 return 0; }
Re: ジョイパッドの入力状態 ( No.7 )
名前:ミルク(解決) 日時:2009/12/19 10:58

わわ、すごいです。 確かに十字キーでも動作しました。 管理人様ありがとうございます。 int Pov; Pov = GetJoypadPOVState( DX_INPUT_PAD1, 0 ) ; という使い方をすれば良かったのですね。 これまでは int Pov; GetJoypadPOVState( DX_INPUT_PAD1, Pov ) ; とやっていました。 これで出来るわけがなかったのですね。 本当にありがとうございます。 以上で解決とします。

Page: 1 |