次の方法で共有


DIEFFECT

IDirectInputDevice8::CreateEffect メソッドで、新しい IDirectInputEffect インターフェイス オブジェクトを初期化するのに使用されます。IDirectInputEffect::SetParameters および IDirectInputEffect::GetParameters メソッドでも使用されます。

typedef struct DIEFFECT {
    DWORD dwSize;
    DWORD dwFlags;
    DWORD dwDuration;
    DWORD dwSamplePeriod;
    DWORD dwGain;
    DWORD dwTriggerButton;
    DWORD dwTriggerRepeatInterval;
    DWORD cAxes;
    LPDWORD rgdwAxes;
    LPLONG rglDirection;
    LPDIENVELOPE lpEnvelope;
    DWORD cbTypeSpecificParams;
    LPVOID lpvTypeSpecificParams;
    DWORD dwStartDelay;
} DIEFFECT, *LPDIEFFECT;

メンバ

  • dwSize
    構造体のサイズをバイト単位で指定します。構造体を使用する前に、このメンバーを初期化する必要があります。
  • dwFlags
    エフェクトに関連付けられているフラグです。次の 1 つまたは複数の値を組み合わせて指定できます。
    • DIEFF_CARTESIAN
      rglDirection の値は、デカルト座標として解釈されます。
    • DIEFF_OBJECTIDS
      dwTriggerButton および rgdwAxes の値は、IDirectInputDevice8::EnumObjects によって取得されるオブジェクト識別子です。
    • DIEFF_OBJECTOFFSETS
      dwTriggerButton および rgdwAxes の値は、データ フォーマットのオフセットです。
    • DIEFF_POLAR
      rglDirection の値は、極座標として解釈されます。
    • DIEFF_SPHERICAL
      rglDirection の値は、球座標として解釈されます。
  • dwDuration
    エフェクトの合計継続時間 (マイクロ秒単位) です。この値が INFINITE である場合、エフェクトの継続時間は無限長になります。エンベロープがエフェクトに適用されている場合、アタックが適用され、無限に持続します。
  • dwSamplePeriod
    デバイスがエフェクトを再生する間隔 (マイクロ秒単位) です。値 が 0 の場合は、既定の再生サンプリング レートを使用することを示します。 デバイスが指定のレートでエフェクトを再生できない場合、サポートしているレートの中で、指定された値に最も近いレートを選択します。 特殊効果には、カスタム dwSamplePeriod の設定を使用することができます。たとえば、意図的に大きなサンプリング間隔で正弦波を再生すると、質感が粗くなります。
  • dwGain
    エフェクトに適用されるゲイン (0 ~ 10,000 の範囲) です。ゲインは、エフェクトのすべてのマグニチュードとそのエンベロープに適用されるスケール係数です。
  • dwTriggerButton
    エフェクトの再生をトリガーするのに使用するボタンの識別子またはオフセットです。DIEFF_OBJECTIDS および DIEFF_OBJECTOFFSETS フラグによって、値のセマンティクスが決まります。このメンバーが DIEB_NOTRIGGER に設定されている場合、エフェクトに関連付けられているトリガー ボタンはありません。
  • dwTriggerRepeatInterval
    エフェクトがボタンを押してトリガーされ、そのボタンが押し続けられたときに、ある再生が終わってから次の再生が始まるまでの間隔 (マイクロ秒単位) です。この値を INFINITE に設定すると、繰り返しが抑制されます。 DIEffectInfo 構造体の dwStaticParams メンバーに DIEP_TRIGGERREPEATINTERVAL フラグが設定されている場合は、エフェクトのトリガーの繰り返しがサポートされています。
  • cAxes
    エフェクトに関連する軸の数です。軸リストまたは方向リストの変更や設定を行う場合は、呼び出し側のアプリケーションがこのメンバーを設定する必要があります。 エフェクトの軸の数を一度設定したら、後で変更することはできません。
  • rgdwAxes
    エフェクトが適用される軸の識別子またはオフセットを格納する (cAxes 要素の) DWORD 配列へのポインターです。DIEFF_OBJECTIDS および DIEFF_OBJECTOFFSETS フラグによって、配列の値のセマンティクスが決まります。 エフェクトに関連付けられた軸のリストを一度設定したら、後で変更することはできません。 1 つのエフェクトに 32 までの軸を関連付けることができます。
  • rglDirection
    デカルト座標、極座標、または球座標を格納する (cAxes 要素の) LONG 配列へのポインターです。DIEFF_CARTESIAN、DIEFF_POLAR、および DIEFF_SPHERICAL フラグによって、配列の値のセマンティクスが決まります。 デカルト座標の場合、rglDirection の各値は、rgdwAxes の対応する軸に関連付けられます。 極座標の場合、角度は、(0, - 1) の方向から (1, 0) の方向に回転した角度の 100 倍で計測されます。これは、一般に、北はユーザーの正面の方向で、東はユーザーの右側であることを意味します。最後の要素は使用されません。 球座標の場合、最初の角度は、(1, 0) の方向から (0, 1) の方向に回転した角度の 100 倍で計測されます。2 番目の角度は (軸の数が 3 つ以上である場合)、(0, 0, 1) の方向に向かう角度の 100 倍で計測されます。3 番目の角度は (軸の数が 4 つ以上である場合)、(0, 0, 0, 1) の方向に向かう角度の 100 倍で計測されます。これ以降も同様に計測されます。最後の要素は使用されません。
  • lpEnvelope
    このエフェクトが使用するエンベロープを表す DIENVELOPE 構造体へのポインターです (省略可能)。すべてのエフェクト タイプがエンベロープを使用するとは限りません。エンベロープを適用しない場合、このメンバーは NULL に設定する必要があります。
  • cbTypeSpecificParams
    対応するエフェクト タイプのタイプ固有の追加パラメーターのバイト数です。
  • lpvTypeSpecificParams
    タイプ固有のパラメーターへのポインターです。タイプ固有のパラメーターがない場合は、NULL です。 エフェクトが DIEFT_CONDITION 型の場合、このメンバーには、条件のパラメーターを定義する DICONDITION 構造体の配列へのポインターが格納されます。1 つの構造体を使用することもできます。この場合、条件は、rglDirection 配列で指定された方向で適用されます。それ以外の場合は、rgdwAxes 配列の軸と同じ順序で、軸ごとに構造体が 1 つずつ必要です。軸ごとに構造体を 1 つずつ用意した場合、エフェクトを回転できません。rglDirection 配列で、次の値を使用する必要があります。 エフェクトが DIEFT_CUSTOMFORCE 型の場合、このメンバーには、カスタム フォースのパラメーターを定義する DICUSTOMFORCE 構造体へのポインターが格納されます。 エフェクトが DIEFT_PERIODIC 型の場合、このメンバーには、エフェクトのパラメーターを定義する DIPERIODIC 構造体へのポインターが格納されます。 エフェクトが DIEFT_CONSTANTFORCE 型の場合、このメンバーには、コンスタント フォースのパラメーターを定義する DICONSTANTFORCE 構造体へのポインターが格納されます。 エフェクトが DIEFT_RAMPFORCE 型の場合、このメンバーには、ランプ フォースのパラメーターを定義する DIRAMPFORCE 構造体へのポインターが格納されます。
  • dwStartDelay
    IDirectInputEffect::Start を呼び出してからエフェクトを再生するまでにデバイスが待機する時間 (マイクロ秒単位) です。この値が 0 の場合、すぐにエフェクトの再生が開始されます。DirectX 7.0 より前のバージョンには、このメンバーは存在しません。

解説 

    非同期 rglDirection 配列には、 極座標または球座標が指定されている場合でも、cAxes エントリが含まれている必要があります。極座標または球座標の場合、 rglDirection 配列の最後の要素は予約されており、0 になる必要があります。