Platform SDK: DirectX |
ここでは、C++ でのアプリケーション開発について説明する。DirectX for Visual Basic は、エフェクト ファイルをサポートしていない。
DirectX SDK で提供される Force Editor、または同じファイル フォーマットを使用する別のアプリケーションを使って、エフェクトをデザインし、ファイルに保存することができる。実行時にこれらのエフェクトを読み込むことで、任意のアプリケーションで使用することができる。
エフェクトを読み込むには、IDirectInputDevice7::EnumEffectsInFile メソッドを呼び出す。デフォルトでは、列挙は標準の DirectInput エフェクトに限定されるが、DIFEF_INCLUDENONSTANDARD フラグを設定することで、これ以外のエフェクトを列挙できる。また、DIFEF_MODIFYIFNEEDED フラグを設定すると、必要に応じて、エフェクトがデバイスに対して作用するように、各エフェクトのパラメータの変更を DirectInput に指示することができる(たとえば、2 つの軸に対して作成されたエフェクトを、単一軸の車のハンドルに対して作用させることができる)。
次のサンプル コードでは、最初の 3 つの標準エフェクトがファイルから読み込まれ、DirectInputEffect オブジェクトとして作成される。
// g_lpdid7 は、フォース フィードバック デバイスへの有効な // IDirectInputDevice7 ポインタである。 // エフェクト ポインタの配列は、グローバルに宣言される。 LPDIRECTINPUTEFFECT pEff[3]; . . . g_lpdid7->EnumEffectsInFile("FEdit1.ffe", EnumEffectsInFileProc, NULL, DIFEF_MODIFYIFNEEDED); . . .
以下のコールバック プロシージャは、DIENUM_STOP が返されるまで、エフェクト ファイル内のエフェクトごとに呼び出される。
BOOL CALLBACK EnumEffectsInFileProc(LPCDIFILEEFFECT lpdife, LPVOID pvRef) { HRESULT hr; static int i; // DIFEF_MODIFYIFNEEDED フラグが渡されたので、 // エフェクト パラメータは lpdife->lpDiEffect に変更される。 hr = g_lpdid7->CreateEffect(lpdife->GuidEffect, lpdife->lpDiEffect, &pEff[i], NULL); if (FAILED(hr)) { // エラー処理 } if (++i > 2) return DIENUM_STOP; else return DIENUM_CONTINUE; }