Microsoft DirectX 8.0 (C++)

エフェクトの作成

エフェクト オブジェクトを生成するには、IDirectInputDevice8::CreateEffect メソッドを使用する。次のサンプル コードで、g_lpdid はインターフェイスのインスタンスを指している。この例では、半秒間に全力でジョイスティックをユーザーから離れる方向へ引くという、非常に単純なエフェクトが生成される。

HRESULT  hr;
LPDIRECTINPUTEFFECT lpdiEffect;  // 生成されるエフェクトへのポインタを受け取る。
DIEFFECT diEffect;               // 生成されるエフェクト用のパラメータ。
 
DWORD    dwAxes[2] = { DIJOFS_X, DIJOFS_Y };
LONG     lDirection[2] = { 18000, 0 };
 
DICONSTANTFORCE diConstantForce; 
 
diConstantForce.lMagnitude = DI_FFNOMINALMAX;   // 最大フォース。
 
diEffect.dwSize          = sizeof(DIEFFECT); 
diEffect.dwFlags         = DIEFF_POLAR | DIEFF_OBJECTOFFSETS; 
diEffect.dwDuration      = (DWORD)(0.5 * DI_SECONDS);
diEffect.dwSamplePeriod  = 0;                 // デフォルト設定。
diEffect.dwGain          = DI_FFNOMINALMAX;   // スケーリングなし。
diEffect.dwTriggerButton = DIEB_NOTRIGGER;    // ボタン応答ではない。
diEffect.dwTriggerRepeatInterval = 0;         // 利用できない。
diEffect.cAxes                   = 2; 
diEffect.rgdwAxes                = &dwAxes[0]; 
diEffect.rglDirection            = &lDirection[0]; 
diEffect.lpEnvelope              = NULL; 
diEffect.cbTypeSpecificParams    = sizeof(DICONSTANTFORCE);
diEffect.lpvTypeSpecificParams   = &diConstantForce;  
 
hr = g_lpdid->CreateEffect(GUID_ConstantForce,
                           &diEffect,
                           &lpdiEffect,
                           NULL);

このメソッド呼び出しでは、最初のパラメータは、生成されるエフェクトに関連付けられたサポートされるエフェクトを表す。この例では、Dinput.h で定義済みの GUID のうちの 1 つを使用している。定義済みの GUID を使用する場合、デバイスがこのエフェクトをサポートしなければ呼び出しは失敗する。

第 2 のパラメータは、DIEFFECT 構造体に指定されているパラメータを設定する。

第 3 のパラメータは、呼び出しが成功した場合に、エフェクト オブジェクトへのポインタを受け取る。

DIEFF_POLAR フラグは、フォースの方向に使用する座標の種類を指定する (「エフェクトの方向」を参照すること)。このフラグは DIEFF_OBJECTOFFSETS と組み合わされる。これは、ほかのメンバで使用されるボタンや軸も、このデバイスの DIDATAFORMAT 構造体の中でオフセットによって識別される、ということを示す。この代わりに DIEFF_OBJECTIDS フラグを使用することができる。このフラグは、オブジェクトが IDirectInputDevice8::EnumObjects メソッドで列挙されたとき、そのオブジェクトに対して返される DIDEVICEOBJECTINSTANCE 構造体の dwType メンバによってボタンと軸が識別される、ということを意味している。

DIEFFECT 構造体のメンバの詳細については、「エフェクトの方向」を参照すること。

デバイスが満杯ではなく、排他協調レベルで取得されたなら、エフェクトは作成時にデバイスに自動的にダウンロードされる。