Platform SDK: DirectX

エフェクトのプレイバック

[C++]

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

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

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

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

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

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

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

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

[Visual Basic]

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

Start メソッドの iterations パラメータに -1 を渡すと、エンベロープを適用しながらエフェクトのプレイバックを反復させることができる。エンベロープを反復することなくエフェクトを反復したいとき (たとえば、最初に強いキックをした後、動悸を静めるというような場合) は、iterations に 1 を設定し、次に 型の lDuration メンバに -1 を設定すればよい (これは DirectInputDevice.CreateEffect メソッドに渡されるタイプである)。

 :  デバイスによっては、エフェクトの複数回の繰り返しが不可能で、Start メソッドへのパラメータ iterations に値 1 しか認めないものもある。

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

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

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

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

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