GetJoypadXInputState

ジョイパッドの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
URLhttps://dxlib.xsrv.jp/
備考hspdxlib.as をインクルードして使用
タイプDxLib ゲームライブラリ
グループDxLib 入力
対応環境
  • Windows 版 HSP
hs ファイルhsphelp\hspdxlib.hs