Platform SDK: DirectX

ステップ 3 : ジョイスティック プロパティの設定

[C++]

ここでは、Visual Basic でのアプリケーション開発について説明する。C++ については、「DirectInput C/C++ チュートリアル」を参照すること。

[Visual Basic]

プロパティの変更は、DirectInputDevice.SetProperty メソッドを使って行う。これはデバイスの確立後、かつデバイスの取得前に行わなければならない。

デバイスが返す軸の範囲の値は軸ごとに異なっているので、すべてのデバイスに適用される範囲を設定するのが好ましい。Joystick サンプルでは、すべての軸の値を 0 〜 10,000 の範囲に収めるよう要求している。

Dim DiProp_Range As DIPROPRANGE
 
With DiProp_Range
    .lHow = DIPH_DEVICE  ' すべての軸に対して設定する。
    .lSize = Len(DiProp_Range)
    .lMin = 0
    .lMax = 10000
End With
diDev.SetProperty "DIPROP_RANGE", DiProp_Range

lSize メンバ内の DIPROPRANGE 型の長さを指定しなければならない。なぜなら、このメソッドはさまざまな型のパラメータを処理できるので、割り当てるメモリの量を知る必要があるからである。C++ のプログラミングを熟知している場合は、Len(DIPROPRANGE) が有効でないことにも注意すること。これはゼロを返すからである。

Joystick サンプルでは、ジョイスティックの無効ゾーンと飽和ゾーンも設定する。この場合、スロットルや方向舵などの軸にこれらの値を設定するのは望ましくない。したがって、プロパティの変更はデータ形式内のオフセットで識別されるデバイス オブジェクトに適用されることを示すように、プロパティ タイプの lHow メンバが設定され、lObj メンバにはそのオフセット値が設定される。

Dim DiProp_Dead As DIPROPLONG
 
With DiProp_Dead
    .lData = 1000
    .lObj = DIJOFS_X
    .lSize = Len(DiProp_Dead)
    .lHow = DIPH_BYOFFSET
' x 軸の設定。
    .lObj = DIJOFS_X
    diDev.SetProperty "DIPROP_DEADZONE", DiProp_Dead
' y 軸の設定。
    .lObj = DIJOFS_Y
    diDev.SetProperty "DIPROP_DEADZONE", DiProp_Dead
End With

lData の値は、無効ゾーンとして設定する移動範囲の割合であり、10,000 までの値で表される。サンプルで使用される 1000 という値は、x 軸と y 軸の移動範囲のうち中心の 10% が 5000 として報告されることを指定している。5000 は、前のステップで設定した範囲の中心を表す値である。

 :  無効ゾーンと飽和値は、デバイスにより報告される値の範囲にかかわらず、常に 10,000 までの値で表される。

デバイスの飽和ゾーンも同様に設定する。この場合、lData は飽和ゾーンの外側にある最大の移動範囲の割合を表すので、9500 である。つまり、ジョイスティックにより返される未加工の値の上位および下位 5% は、デバイスに設定された最小値または最大値として報告される (この場合、0 または 10,000)。

次項 : ステップ 4 : ジョイスティックからの直接データの取得