Microsoft DirectX 8.0 (C++) |
次に、エフェクトを修正し、木を切るにつれてチェーンソーのエンジンの回転が遅くなるようにする。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++ チュートリアル」を参照すること。