Platform SDK: DirectX

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

[Visual Basic]

ここでは、C++ でのアプリケーション開発について説明する。Visual Basic については、「DirectInput Visual Basic チュートリアル」を参照すること。

[C++]

チェーンソーは陽気にガタガタと音を立てている。このチェーンソーが木材に切り込む時にエンジンが減速するシミュレーションをするために、このエフェクトを変更したいとする。幸い、DirectInput では再生中のエフェクトのパラメータを変更することができる。

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

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

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

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

その後、実際に変更を行うメソッドを呼び出す。

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

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

ほかのフラグを使って、変更の方法を制御することができる。たとえば、DIEP_NODOWNLOAD フラグを使えば、エフェクトの始動直後にパラメータを変更し、しかも、ユーザーが実際に木材を切り始めるまで、新しいエフェクトの実行を遅らせることができるだろう。その後、IDirectInputEffect::Download メソッドを呼び出すことになるだろう。さまざまな制御フラグの使用方法については、IDirectInputEffect::SetParameters を参照すること。