GetJoypadDirectInputState

ジョイパッドのDirectInputから取得できる情報を得る

val = GetJoypadDirectInputState(InputType, DInputState)

InputType : 入力状態を取得するパッドの識別子
DX_INPUT_PAD1    : パッド1
DX_INPUT_PAD2    : パッド2
DX_INPUT_PAD3    : パッド3
DX_INPUT_PAD4    : パッド4
DInputState : DirectInputから得られる情報を代入する DINPUT_JOYSTATE 型構造体のアドレス
戻り値

(プラグイン / モジュール : DxLibW)

解説

DirectInput は DirectX の入力機器を制御するための機能の名称で、
DXライブラリも DirectInput を使用してキーボードやゲームパッドの入力状態を取得しています。

関数 GetJoypadInputState では DirectInput から得られる情報を扱いやすい状態にして戻り値として返しますが、
この関数では DirectInput から得られる入力情報を生で取得することになります。

何故未加工のデータを取得できるようにするのかと言いますと、市販されているゲームパッドの右スティックが原因です。

DirectInputから得られるゲームパッドの情報を代入する構造体 DINPUT_JOYSTATE は以下のようになっています。

struct DINPUT_JOYSTATE
{
int		X ;		// スティックのX軸パラメータ( -1000~1000 )
int		Y ;		// スティックのY軸パラメータ( -1000~1000 )
int		Z ;		// スティックのZ軸パラメータ( -1000~1000 )
int		Rx ;		// スティックのX軸回転パラメータ( -1000~1000 )
int		Ry ;		// スティックのY軸回転パラメータ( -1000~1000 )
int		Rz ;		// スティックのZ軸回転パラメータ( -1000~1000 )
int		Slider[ 2 ] ;	// スライダー二つ
unsigned int	POV[ 4 ] ;	// ハットスイッチ4つ
// ( 0xffffffff:入力なし 0:上 4500:右上 9000:右 13500:右下
//		 18000:下 22500:左下 27000:左 31500:左上 )
unsigned char	Buttons[ 32 ] ;	// ボタン32個( 押されたボタンは 128 になる )
} ;

見ての通りスティックは一つしか想定されていません。( Rx,Ry,Rz は回転パラメータなので二つ目のスティックを想定したものではありません )

アナログスティックが二つ付いたゲームパッドが世に出る前に DirectInput が定義したデータ型なので仕方が無いのかもしれませんが、
ともあれ PlayStation のアナログスティック付きコントローラ( DUAL SHOCK )が登場した後からPC用のゲームパッドも DUAL SHOCK
を模して二つのアナログスティックが付いたものが登場するようになりました。

しかし、DirectInput の構造体にはに二つ目のスティックに対応するメンバー変数がありません・・・

そこでどうしたかというと・・・・各社適当に使われていないメンバー変数を二つ選び、そこに二つ目のスティック( 右スティック )の情報を代入することにしました・・・

ある会社のゲームパッドの右スティックは横軸の値を Z に、縦軸の値を Rx に割り当て、また別の会社は横軸の値を Rx に、縦軸の値を Ry に、
また別の会社では横軸を Z に、縦軸を Rz に割り当てました。

統一されていればDXライブラリ側で右スティックの情報が代入されているメンバー変数の値を見て右スティックの情報を返す専用の関数を用意できるのですが、
各社バラバラではそれができません。

苦肉の策として、DirectInput から得られる情報をそのまま取得できるようにして、ライブラリ使用者の方に対応を委ねることにしたというわけです。( 主に対応はキーコンフィグになると思います )

戻り値:
  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