Microsoft DirectX 8.0 (Visual Basic)

ステップ 3 : エフェクトの作成

このサンプルで作成するエフェクトは、静止オブジェクト (磁石など) が移動可能なオブジェクト (鉄球) を引き付ける力をシミュレートする。移動可能なオブジェクトはジョイスティックで制御される。このシミュレーションの最初に、鉄球は磁石の真南にあり、引く最大距離の半分の位置にある。

磁石の引き付ける力は、コンスタント フォースによってシミュレートする。まず、フォースを記述する DIEFFECT 型を設定する。

Dim EffectInfo as DIEFFECT
With EffectInfo
    .constantForce.lMagnitude = 5000
    .lDuration = -1       ' 無限。
    .x = 18000
    .lGain = 10000        ' 最大マグニチュードで再生する。
    .lTriggerButton = -1  ' トリガ ボタンなし。
End With

x パラメータを 18,000 に設定し、フォースが真北から 180 度の点から発生していると指定する。つまり、フォースは真南から真北に、ユーザーから遠くに向かって移動する。エフェクトの方向の詳細については、「エフェクトの方向」を参照すること。

DIEFFECT のほかのすべてのメンバは、コンスタント フォースに無関係であるか、または値 0 で有効である。

エフェクトが定義されたら、DirectInputDevice8.CreateEffect メソッドを使って作成する。

Dim di_effect As DirectInputEffect
Set di_effect = didev.CreateEffect("GUID_ConstantForce", EffectInfo)

このときにデバイスが取得状態にあれば、エフェクトが自動的にダウンロードされる。エフェクトが取得状態でない場合は、DirectInputEffect.Start メソッドを使ってエフェクトが開始されたときにダウンロードされる。

di_effect.Start(1, 0)

このエフェクトは無限の継続時間を持っているので、エフェクトは一度だけ補間すればよい。

変化しない一定のエフェクトも有用であるが、エフェクトは再生やユーザーからの入力に対応して変化することがある。これについては、「ステップ 4 : エフェクトの変更」で説明する。