Platform SDK: DirectX |
エフェクトの再生中でもエフェクトのパラメータを変更することができる場合がある。これは 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 構造体からのデータ転送は、関連するメンバに限られることが保証される。したがって、この構造体全体を初期化する必要がなくなり、デバイスに送信する必要のあるデータの量が最小限で済む。
エフェクトの再生中でもエフェクトのパラメータを変更することができる場合がある。これを行うには、DirectInputEffect.SetParameters メソッドを使用する。
エフェクトの再生中でも変更できるエフェクトのパラメータを調べるには、DirectInputEnumEffects.GetDynamicParams メソッドを呼び出す。
エフェクト再生中には変更できないエフェクトのパラメータを変更しようとして、エフェクトが実際にまだ再生しているときは、通常、DirectInput はエフェクトを停止させ、パラメータを更新し、エフェクトを再スタートさせる。この DirectInput のデフォルトの働きを無効にするには、SetParameters に DIEP_NORESTART フラグを渡せばよい。
次のコードは、DirectInputEffect オブジェクトの dieff で表されるコンスタント フォースのマグニチュードを変更する例である。このオブジェクトは、グローバルな DIEFFECT 型の effectinfo を使って作成済みである。
effectinfo.constantForce.lMagnitude = 5000 Call dieff.SetParameters(effectinfo, DIEP_TYPESPECIFICPARAMS)
DIEFFECT の condition、constantforce、periodicforce、および rampforce の各メンバを変更する場合は、DIEP_TYPESPECIFICPARAMS フラグを設定する必要がある。