トップページ > 記事閲覧
DINPUT_JOYSTATE構造体について
名前:takatwu 日時: 2014/04/13 20:08

ジョイパッドのDirectInputから取得できる情報を得る GetJoypadDirectInputState関数で使用する DINPUT_JOYSTATE構造体について質問です。 ハットスイッチの情報を得るunsigned int POV[ 4 ] ;について 入力無しの時は-1を得るとありますが符号なしでは-1は得られないのではないでしょうか?
メンテ

Page: 1 |

Re: DINPUT_JOYSTATE構造体について ( No.1 )
名前:管理人 日時:2014/04/13 20:25

すみません、ご指摘の通り表記が間違っています -1 ではなく 0xffffffff となります 「入力されていないときは 0xffffffff となります」 というのもちょっと嫌な感じですが、今から変数の型を変更するのも避けたいので 解説の方を -1 から 0xffffffff に変更しました
メンテ
Re: DINPUT_JOYSTATE構造体について ( No.2 )
名前:takatwu 日時:2014/04/13 22:03

返答有難うございます。 実際にGetJoypadDirectInputState関数を使用しましたが POVの値は4つ全て0になってしまいました。 またハットスイッチに割り当てられている(であろう)キーを入力しても0のまま変化しませんでした。 試しにパッドをPCから抜いてプログラムを起動したところ正常に0xffffffffが帰ってきました。 使用しているPCはWin7 64bit、使用しているパッドはDUALSHOCK4です。
メンテ
Re: DINPUT_JOYSTATE構造体について ( No.3 )
名前:管理人 日時:2014/04/16 00:30

私も DUALSHOCK4 を接続して以下の DINPUT_JOYSTATE 構造体の中身を表示する テストプログラムを実行してみましたが、POV は 0xffffffff( 表示では -1 )に なっていました #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { DINPUT_JOYSTATE input ; int i ; char InstanceName[ 512 ] ; char ProductName[ 512 ] ; // ウインドウモードで起動 ChangeWindowMode( TRUE ); SetGraphMode( 640, 700, 32 ) ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) return -1; // 描画先を裏画面にする SetDrawScreen( DX_SCREEN_BACK ); // メインループ(何かキーが押されたらループを抜ける) while( ProcessMessage() == 0 ) { // 画面のクリア ClearDrawScreen() ; // 入力状態を取得 GetJoypadDirectInputState( DX_INPUT_PAD1, &input ) ; // 画面に情報を描画 DrawFormatString( 0, 0, GetColor( 255,255,255 ), "X:%d Y:%d Z:%d", input.X, input.Y, input.Z ) ; DrawFormatString( 0, 16, GetColor( 255,255,255 ), "Rx:%d Ry:%d Rz:%d", input.Rx, input.Ry, input.Rz ) ; DrawFormatString( 0, 32, GetColor( 255,255,255 ), "Slider 0:%d 1:%d", input.Slider[ 0 ], input.Slider[ 1 ] ) ; DrawFormatString( 0, 48, GetColor( 255,255,255 ), "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", GetColor( 255,255,255 ) ) ; for( i = 0 ; i < 32 ; i ++ ) { DrawFormatString( 64 + i % 8 * 64, 64 + i / 8 * 16, GetColor( 255,255,255 ), "%2d:%d", i, input.Buttons[ i ] ) ; } DrawFormatString( 0, 256, GetColor( 255,255,255 ), "InputState %d", GetJoypadInputState( DX_INPUT_PAD1 ) ) ; // 裏画面の内容を表画面に反映 ScreenFlip(); } // DXライブラリの後始末 DxLib_End(); // ソフトの終了 return 0; } POV0は上下左右ボタンが割り当てられているようです よろしければ takatwuさんの環境ではどのような結果になるか試してみて頂けないでしょうか?
メンテ
Re: DINPUT_JOYSTATE構造体について ( No.4 )
名前:takatwu(解決) 日時:2014/04/16 02:11

大変申し訳ありません。 SetUseDirectInputFlag( FALSE ); のコードを入れていたことをすっかり忘れていました。 上記コードを消すことで正常に動作しました。
メンテ

Page: 1 |

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

   クッキー保存