Microsoft DirectX 8.0 (Visual Basic) |
条件とは、デバイス内の現在のセンサ値に反応して適用されるフォースのことである。すなわち、条件は、ジョイスティック ハンドルの位置または速度など、デバイスに関する情報を必要とする。
一般的に、条件はゲームやその他のアプリケーションにおける個別のイベントには関連付けられていない。条件は、フライト スティックの硬さや緩さ、または直進の位置に戻すハンドルの向きなどの状態を表現する。
条件は、定義されたマグニチュードを持たない。マグニチュードは、入力オブジェクトの動作と位置によって測定される。
Microsoft® DirectInput® は、次のような条件のエフェクトを定義する。
ほとんどのハードウェア デバイスでは、条件にエンベロープを適用できない。
条件には次のタイプのパラメータがある。
飽和をサポートしていないデバイスもある。
デッドバンドをサポートしていないデバイスもある。
条件に継続時間を設定することができる。しかし、継続時間を INFINITE (-1) に設定し、アプリケーションで特定のイベントに応答するときだけエフェクトを停止する方法が使用されることが多い。
条件を生成するには、DirectInputDevice8.CreateEffect メソッドの rguid パラメータに、次に挙げる値のどれか 1 つを渡す。
DirectInputEnumEffects.GetType により返された値の下位バイトが DIEFT_CONDITION に等しい場合は、DirectInputEnumEffects.GetEffectGuid メソッドで取得したほかの任意の GUID を渡すこともできる。この方法を使えば、業者が設計したハードウェア特有の条件を使用することができる。
条件のタイプ固有パラメータは、DIEFFECT 型の conditionX および conditionY メンバに含まれる DICONDITION 型に記述される。
エフェクトの係数と飽和について正と負の両方がデバイスでサポートされているかどうかを確認するには、アプリケーションで DirectInputEnumEffects.GetType メソッドを呼び出し、返された値のメンバを調べる必要がある。エフェクトが DIEFT_POSNEGCOEFFICIENTS フラグを返さなければ、DICONDITION.lNegativeCoefficient の値は無視され、lPositiveCoefficient の値が軸全体に適用される。同様に、エフェクトが DIEFT_POSNEGSATURATION フラグを返さなければ、lNegativeSaturation の値は無視され、lPositiveSaturation の値が負の飽和レベルとして使用される。また、エフェクトが DIEFT_SATURATION フラグを返さなければ、lPositiveSaturation と lNegativeSaturation の両方の値が無視され、飽和は適用されない。
係数には負数を設定することができる。こうすると、エフェクトは反対方向のフォースを生成する。たとえばスプリング エフェクトでは、係数に負数を設定すると、スプリング エフェクトはオフセット ポイントに向かって引っ張らずに、オフセット ポイントから離れる方向へ押すことになる。
また、GetType メンバ に DIEFT_DEADBAND フラグが設定されているかどうかをチェックすることで、デッドバンドが条件に対してサポートされているかどうかを知ることができる。サポートされていない場合、DICONDITION 構造体の lDeadBand メンバの値は無視される。
単一軸エフェクトを生成するには、DIEFFECT 型の conditionX メンバまたは conditionY メンバに、未使用の軸に対する係数をゼロとして設定する。
DirectX® for Microsoft Visual Basic® では、条件の回転はサポートされていない。