Platform SDK: DirectX

エフェクトの変更

[C++]

エフェクトの再生中でもエフェクトのパラメータを変更することができる場合がある。これは IDirectInputEffect::SetParameters メソッドを使用して行う。

DIEFFECTINFO 構造体の dwDynamicParams メンバは、エフェクトの再生中でも変更できるエフェクトのパラメータを通知する。エフェクトの再生中には変更できないエフェクトのパラメータを変更しようとして、エフェクトが実際にまだ再生しているときは、通常、DirectInput はエフェクトを停止させ、パラメータを更新し、エフェクトを再スタートさせる。この DirectInput のデフォルトの動作を無効にするには、DIEP_NORESTART フラグを渡せばよい。

次の C++ のプログラム例では、「エフェクトの生成」にあるサンプル プログラムでセットされたコンスタント フォースのマグニチュードを変更する。

DIEFFECT    diEffect;      // エフェクト用のパラメータ。
DICONSTANTFORCE diConstantForce;
// タイプ固有パラメータ。
 
diConstantForce.lMagnitude = 5000;
diEffect.dwSize = sizeof(DIEFFECT);
diEffect.cbTypeSpecificParams = sizeof(DICONSTANTFORCE);
diEffect.lpvTypeSpecificParams = &diConstantForce;
hr = lpdiEffect->SetParameters(&diEffect, DIEP_TYPESPECIFICPARAMS);

このフラグにより、DIEFFECT 構造体からのデータ転送は、関連するメンバに限られることが保証される。したがって、この構造体全体を初期化する必要がなくなり、デバイスに送信する必要のあるデータの量が最小限で済む。

[Visual Basic]

エフェクトの再生中でもエフェクトのパラメータを変更することができる場合がある。これを行うには、DirectInputEffect.SetParameters メソッドを使用する。

エフェクトの再生中でも変更できるエフェクトのパラメータを調べるには、DirectInputEnumEffects.GetDynamicParams メソッドを呼び出す。

エフェクト再生中には変更できないエフェクトのパラメータを変更しようとして、エフェクトが実際にまだ再生しているときは、通常、DirectInput はエフェクトを停止させ、パラメータを更新し、エフェクトを再スタートさせる。この DirectInput のデフォルトの働きを無効にするには、SetParameters に DIEP_NORESTART フラグを渡せばよい。

次のコードは、DirectInputEffect オブジェクトの dieff で表されるコンスタント フォースのマグニチュードを変更する例である。このオブジェクトは、グローバルな DIEFFECT 型の effectinfo を使って作成済みである。

effectinfo.constantForce.lMagnitude = 5000
Call dieff.SetParameters(effectinfo, DIEP_TYPESPECIFICPARAMS)

DIEFFECTconditionconstantforceperiodicforce、および rampforce の各メンバを変更する場合は、DIEP_TYPESPECIFICPARAMS フラグを設定する必要がある。