DirectInput から得られる情報をそのまま取得するための関数を追加しましたので、
よろしければこちらのバージョンをダウンロードしてください
http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用
http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用
(中身を既存のライブラリのファイルに上書きして、BCCをお使いの
場合は『再構築』、VCをお使いの場合は『リビルド』をして下さい)
以下の関数を追加しました
// ジョイパッドから DirectInput から得られる生のデータを取得する( DX_CHECKINPUT_KEY や DX_INPUT_KEY_PAD1 を引数に渡すとエラー )
int GetJoypadDirectInputState( int InputType, DINPUT_JOYSTATE *DInputState ) ;
第二引数の DINPUT_JOYSTATE は今回新たに追加した構造体で、次のように定義しています
// DirectInput のジョイパッド入力情報
struct DINPUT_JOYSTATE
{
int X ; // スティック0のX軸パラメータ( -1000〜1000 )
int Y ; // スティック0のY軸パラメータ( -1000〜1000 )
int Z ; // スティック0のZ軸パラメータ( -1000〜1000 )
int Rx ; // スティック1のX軸パラメータ( -1000〜1000 )
int Ry ; // スティック1のY軸パラメータ( -1000〜1000 )
int Rz ; // スティック1のZ軸パラメータ( -1000〜1000 )
int Slider[ 2 ] ; // スライダー二つ
unsigned int POV[ 4 ] ; // ハットスイッチ4つ( -1:入力なし 0:上 4500:右上 9000:右 13500:右下 18000:下 22500:左下 27000:左 31500:左上 )
unsigned char Buttons[ 32 ] ; // ボタン32個( 押されたボタンは 128 になる )
} ;
使い方は以下のように構造体のアドレスを渡します
DINPUT_JOYSTATE joy ;
GetJoypadDirectInputState( DX_INPUT_PAD1, &joy ) ;
現在世に出回っているゲーム入力デバイスは当初 DirectInput で想定していた範囲に収まらない
ものが出てきてしまったのか、どのボタンがどのパラメータに相当しているかはデバイス毎に異なります
( 例えば Xbox360 のコントローラの Lトリガーと Rトリガーの値は Z のプラスとマイナスで返ってきます )
なので、PORIさんがお使いのデバイスもどの入力装置がどのパラメータとして得られるかは
実際にこの関数から得られるデータを表示してみないとわかりません
というわけで、GetJoypadDirectInputState で得られる情報を表示するサンプルプログラムをこちらに載せましたので、
よろしければこちらでご確認になってみてください m(_ _)m
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
DINPUT_JOYSTATE input ;
int i ;
// ウインドウモードで起動
ChangeWindowMode( TRUE );
// 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 ] ) ;
}
// 裏画面の内容を表画面に反映
ScreenFlip();
}
// DXライブラリの後始末
DxLib_End();
// ソフトの終了
return 0;
}