Microsoft DirectX 8.0 (C++)

エフェクトの再生

エフェクトの再生を開始する主な方法は 2 つある。IDirectInputEffect::Start メソッドを呼び出して手動で開始する方法と、ボタン押下への応答で自動的に開始する方法である。DIEP_START フラグを指定して IDirectInputEffect::SetParameters メソッドを呼び出すことでエフェクトを変更するときにも、再生が開始する。

dwIterations パラメータに INFINITE を渡すと、エンベロープを適用しながらエフェクトの再生を反復させることができる。エンベロープを反復することなくエフェクトを反復したいとき (たとえば、最初に強いキックをした後、動悸を静めるというような場合) は、dwIterations に 1 を設定し、次に DIEFFECT 構造体の dwDuration メンバに INFINITE をセットすればよい(これは IDirectInputDevice8::CreateEffect メソッドに渡される構造体である)。

 :  デバイスによっては、エフェクトの複数回の補間が不可能で、Start メソッドへのパラメータ dwIterations に値 1 しか認めないものもある。Start からの戻り値を常にチェックして、エフェクトが正常に再生されたかどうかを確認しなければならない。

エフェクトをボタン押下に割り付けるには、DIEFFECT 構造体の dwTriggerButton メンバを設定する。ボタンが押下されているときの再生間に遅延を加えたいならば、その遅延値を dwTriggerRepeatInterval メンバに設定する。この遅延は、1 つの再生の終了から次の再生の開始までの間隔のことで、マイクロ秒単位で表される。

 : デバイスによっては、複数回のエフェクトを同じボタンで発生させることができないものもある。2 つ以上のエフェクトを 1 つのボタンに割り付けると、最後にダウンロードされたエフェクトが、発生するエフェクトとなる。また、トリガの反復間隔はサポートされていない。

エフェクトのトリガ ボタンへの割り付けを解除するには、IDirectInputEffect::Unload メソッドを呼び出すか、または DIEB_NOTRIGGER に設定されている dwTriggerButton に、このエフェクト用のパラメータを設定するか、どちらかの操作を行わなければならない。

割り付けたエフェクトは、ほかのすべてのエフェクトと同様に、アプリケーションがデバイスへのアクセス権を失うと失われる。再びこれらのエフェクトを有効にするには、アプリケーションがデバイスを再取得すると同時にこれらのエフェクトをダウンロードする。「エフェクトのダウンロードとアンロード」を参照すること。この処理はトリガに割り付けていないエフェクトでは不必要である。なぜなら、この種のエフェクトは、Start メソッドが呼び出されるときはいつも、必要に応じて自動的にダウンロードされるからである。

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