Microsoft DirectX 8.0 (Visual Basic) |
このサンプルで作成するエフェクトは、静止オブジェクト (磁石など) が移動可能なオブジェクト (鉄球) を引き付ける力をシミュレートする。移動可能なオブジェクトはジョイスティックで制御される。このシミュレーションの最初に、鉄球は磁石の真南にあり、引く最大距離の半分の位置にある。
磁石の引き付ける力は、コンスタント フォースによってシミュレートする。まず、フォースを記述する 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 : エフェクトの変更」で説明する。