Microsoft DirectX 8.0 (Visual Basic) |
プロパティの変更は、DirectInputDevice8.SetProperty メソッドを使って行う。これはデバイスの確立後、かつデバイスの取得前に行わなければならない。
デバイスが返す軸の範囲の値は軸ごとに異なっているので、すべてのデバイスに適用される範囲を設定するのが好ましい。Joystick サンプルでは、すべての軸の値を 0 〜 10,000 の範囲に収めるよう要求している。
プロパティは、プロパティごとに異なる型を使って設定される。軸値に対しては、DIPROPRANGE 型を使用する。このプロパティ型の構造体は、SetProperty を呼び出して適用される。
Dim DiProp_Range As DIPROPRANGE With DiProp_Range .lHow = DIPH_DEVICE .lMin = 0 .lMax = 10000 End With diDev.SetProperty "DIPROP_RANGE", DiProp_Range
DIPH_DEVICE フラグを使って、そのプロパティがデバイス上のすべての軸に適用されることを示す。Joystick サンプルでは、ジョイスティックのデッド ゾーンと飽和ゾーンも設定する。この例では、これらの値をスロットルやラダーなど、ほかの軸に設定することは望ましくない。プロパティ型の lHow メンバが設定されると、データ形式内のオフセットによって識別されるデバイス オブジェクトに対してプロパティの変更が適用されることを示し、lObj メンバはそのオフセット値に設定される。この例では、DIPROPLONG 型を使って、SetProperty によって Long 型の値が送信される。次のサンプル コードは、デッド ゾーン プロパティの場合を示している。
Dim DiProp_Dead As DIPROPLONG With DiProp_Dead .lData = 1000 .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 は 10,000 の 10 分の 1 であり、x 軸および y 軸の移動範囲のうち中心の 10 分の 1 を指定し、まだ中心にあることが報告される (この場合、5000)。
注 デッド ゾーンと飽和値は、デバイスにより報告される値の範囲にかかわらず、常に 10,000 までの値で表される。
デバイスの飽和ゾーンも同様に設定する。この場合、lData は飽和ゾーンの外側にある最大の移動範囲の割合を表すので、9500 である。つまり、ジョイスティックにより返される未処理の値の上位および下位 5% は、デバイスに設定された最小値または最大値として報告される (この場合、0 または 10,000)。
次に、「ステップ 4 : ジョイスティックからの直接データの取得」でデバイスからのデータを取得する。