ジョイパッドのXInputから取得できる情報を得る
val = GetJoypadXInputState(InputType, XInputState)
InputType : 入力状態を取得するパッドの識別子 DX_INPUT_PAD1 : パッド1 DX_INPUT_PAD2 : パッド2 DX_INPUT_PAD3 : パッド3 DX_INPUT_PAD4 : パッド4 XInputState : XInputから得られる情報を代入する XINPUT_STATE 型構造体のアドレス 戻り値
(プラグイン / モジュール : DxLibW)
XInput は DirectX の Xbox360コントローラを制御するための機能の名称で、
DXライブラリも Xbox360コントローラについては XInput を使用して Xbox360コントローラの入力状態を取得しています。
この関数は GetJoypadDirectInputState と同じように、XInput から取得できる生の情報を取得するための関数ですが、
Xbox360コントローラの入力情報も GetJoypadDirectInputState で取得することができます、
なのに何故 XInput の生の入力情報も取得できる関数があるのかと申しますと、
Xbox360コントローラの Lトリガーと Rトリガーの DirectInput での扱いが原因です。
XInputから得られるゲームパッドの情報を代入する構造体 XINPUT_STATE は以下のようになっています。
struct XINPUT_STATE
{
unsigned char Buttons[ 16 ] ; // ボタン16個( 添字には XINPUT_BUTTON_DPAD_UP 等を使用する、
// 0:押されていない 1:押されている )
unsigned char LeftTrigger ; // 左トリガー( 0~255 )
unsigned char RightTrigger ; // 右トリガー( 0~255 )
short ThumbLX ; // 左スティックの横軸値( -32768 ~ 32767 )
short ThumbLY ; // 左スティックの縦軸値( -32768 ~ 32767 )
short ThumbRX ; // 右スティックの横軸値( -32768 ~ 32767 )
short ThumbRY ; // 右スティックの縦軸値( -32768 ~ 32767 )
} ;
// XInputボタン入力定義
#define XINPUT_BUTTON_DPAD_UP (0) // デジタル方向ボタン上
#define XINPUT_BUTTON_DPAD_DOWN (1) // デジタル方向ボタン下
#define XINPUT_BUTTON_DPAD_LEFT (2) // デジタル方向ボタン左
#define XINPUT_BUTTON_DPAD_RIGHT (3) // デジタル方向ボタン右
#define XINPUT_BUTTON_START (4) // STARTボタン
#define XINPUT_BUTTON_BACK (5) // BACKボタン
#define XINPUT_BUTTON_LEFT_THUMB (6) // 左スティック押し込み
#define XINPUT_BUTTON_RIGHT_THUMB (7) // 右スティック押し込み
#define XINPUT_BUTTON_LEFT_SHOULDER (8) // LBボタン
#define XINPUT_BUTTON_RIGHT_SHOULDER (9) // RBボタン
#define XINPUT_BUTTON_A (12) // Aボタン
#define XINPUT_BUTTON_B (13) // Bボタン
#define XINPUT_BUTTON_X (14) // Xボタン
#define XINPUT_BUTTON_Y (15) // Yボタン
Xbox360コントローラに限定されているので DirectInput の情報よりシンプルです。
そして左右スティックも左右トリガーも専用のメンバー変数が割り当てられています。
このように XInput を使用することで問題なく状態が取得できる左右トリガーですが、
DirectInput では左トリガーも右トリガーも構造体 DINPUT_JOYSTATE のメンバー変数 Z に割り当てられています。
どういうことかと言いますと、左トリガーを押し込んだときは Z の値がプラス方向に変化して、
右トリガーを押し込んだときは Z の値がマイナス方向に変化するというものです。
つまり、左右のトリガーを同時に押し込んだときは Z の値は 0 になり、即ち何もトリガーを押していないときと変わらず、押しているかどうかを判断することができません。
何故そんな仕様にしたのかは不明ですが、それに対応するために正常な入力情報を取得するための関数 GetJoypadXInputState があります。
尚、GetJoypadXInputState は Xbox360コントローラが接続されている場合のみ使用可能な関数で、
Xbox360コントローラ以外のゲームパッドが接続されていてもエラーとなり、戻り値は -1 になりますのでご注意ください。
戻り値:
0:成功
| GetJoypadInputState | ジョイパッドの入力状態を得る | (DxLibW) |
| GetJoypadNum | ジョイパッドが接続されている数を取得する | (DxLibW) |
| GetJoypadAnalogInput | ジョイパッドのアナログ的なレバー入力情報を得る | (DxLibW) |
| SetJoypadDeadZone | ジョイパッドの方向入力の無効範囲を設定する | (DxLibW) |
| プラグイン / モジュール | DxLibW |
| バージョン | 3.24f |
| 作成日 | 2026/04/12 |
| 著作者 | DxLib: Takumi Yamada / HSP binding: IronHSP Project |
| URL | https://dxlib.xsrv.jp/ |
| 備考 | hspdxlib.as をインクルードして使用 |
| タイプ | DxLib ゲームライブラリ |
| グループ | DxLib 入力 |
| 対応環境 |
|
| hs ファイル | hsphelp\hspdxlib.hs |