Microsoft DirectX 8.0 (C++)

ステップ 6 : エフェクトの変更

次に、エフェクトを修正し、木を切るにつれてチェーンソーのエンジンの回転が遅くなるようにする。Microsoft® DirectInput® では、再生中にエフェクトのパラメータを修正できる。

このエフェクトを変更するには、新しいDIEFFECT 構造体を設定するか、またはこのエフェクトの作成に使用した構造体にアクセスする。有効な新しい構造体をローカルに設定する場合は、dwSize メンバと、変更するデータを含むまたはそのデータを指すメンバのみを初期化すればよい。

この例では、型固有パラメータのエフェクトの周期を変更するため、エフェクトの作成に使用した DIPERIODIC 構造体へのアクセスが必要になる。すべてのメンバを初期化したローカル コピーを作成する方法もある。DIPERIODIC 構造体のアドレスが DIEFFECT 構造体のメンバ lpvTypeSpecificParams に格納されていることを確認する。

まず、エフェクトの新しい周期を設定する。

diPeriodic.dwPeriod = (DWORD)(0.08 * DI_SECONDS); 
 

次に、IDirectInputEffect::SetParameters メソッドを呼び出して、変更を加える。

hr = g_lpdiEffect->SetParameters(&diEffect, DIEP_TYPESPECIFICPARAMS);
 

この変更を DIEFFECT 構造体の 1 つのメンバに限定している DIEP_TYPESPECIFICPARAMS フラグに注意すること。

ほかのフラグを使って、変更の方法を制御することができる。たとえば、DIEP_NODOWNLOAD フラグを使うと、エフェクトの始動直後にパラメータを変更できるが、IDirectInputEffect::Download メソッドを呼び出すまで実装は遅れる。さまざまな制御フラグの使用に関する詳細については、「IDirectInputEffect::SetParameters」を参照すること。

その他の DirectInput チュートリアルについては、「DirectInput C/C++ チュートリアル」を参照すること。