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