次の方法で共有


エフェクトの再生

エフェクトの再生を開始する主な方法は 2 つあります。IDirectInputEffect::Start メソッドを呼び出して手動で開始するか、ボタンの押し下げに応答して自動的に開始するかです。

IDirectInputEffect::Start メソッドの dwIterations パラメーターに INFINITE を渡すと、毎回エンベロープが適用されてエフェクトが繰り返し再生されます。エンベロープは繰り返さずにエフェクトを繰り返す (たとえば、最初の強いキックの後、一定の振動に落ち着く) 場合は、dwIterations を 1 に設定し、DIEFFECT 構造体の dwDuration メンバーを INFINITE に設定します(この構造体が IDirectInputDevice8::CreateEffect メソッドに渡されます)。

    一部のデバイスでは、1 つのエフェクトで複数の反復をサポートしておらず、IDirectInputEffect::Start メソッドへの dwIterations パラメーターに値 1 のみを受け付けます。IDirectInputEffect::Start からの戻り値を常にチェックして、エフェクトが正常に再生されたことを確認する必要があります。

エフェクトをボタンの押し下げに関連付けるには、DIEFFECT 構造体の dwTriggerButton メンバーを設定します。また、dwTriggerRepeatInterval メンバーを、ボタンが押されたときの再生と再生の間の遅延の値に設定します。この値は、1 回の再生が終わってから次の再生が始まるまでのマイクロ秒単位の間隔です。

    一部のデバイスでは、同じボタンから複数のエフェクトをトリガーできません。1 つのボタンに複数のエフェクトを関連付けると、最後にダウンロードされたエフェクトがトリガーされます。また、トリガーの繰り返し間隔がサポートされない場合があります。

エフェクトとトリガー ボタンとの関連付けを解除するには、IDirectInputEffect::Unload メソッドを呼び出すか、dwTriggerButton を DIEB_NOTRIGGER に設定してそのエフェクトのパラメーターを設定します。

トリガーされたエフェクトは、他のすべての場合と同様に、アプリケーションがデバイスへのアクセスを失うと失われます。エフェクトを再びアクティブにするには、アプリケーションが再びデバイスを獲得するのと同時にエフェクトをダウンロードします。「エフェクトのダウンロードとアンロード」を参照してください。トリガーに関連付けられていないエフェクトは、IDirectInputEffect::Start メソッドが呼び出されると必ず必要に応じて自動的にダウンロードされるため、この手順は不要です。

エフェクトの継続時間が有限で、エフェクトが IDirectInputEffect::Start メソッドの呼び出しによって開始される場合、そのエフェクトは継続時間が過ぎると停止します。経過時間が INFINITE に設定されている場合は、IDirectInputEffect::Stop メソッドが呼び出されたときにのみ再生が終了します。トリガー ボタンに関連付けられているエフェクトは、ボタンが押されると始まり、ボタンが放されるか継続時間が過ぎるかのいずれか早い時点で終了します。