Microsoft DirectX 8.0 (Visual Basic) |
Microsoft® DirectX® for Microsoft Visual Basic® は、x 軸と y 軸での 2 軸エフェクトをサポートしている。
エフェクトの方向は、エフェクトが来る方向である。y 軸の負側に沿った方向でのエフェクトは、スティックを y 軸の正側に沿って (ユーザーに向かって) 押そうとする。エフェクトを打ち消すためにユーザーがスティックを左方向に押さなければならない場合、このエフェクトは「左」方向である。つまり、このエフェクトは x 軸の負側にある。
方向は "極" 座標、"球面" 座標、または、"デカルト" 座標で表すことができる。デフォルトでは、極座標が使用される。方向は DIEFFECT 型の x メンバに指定される。この場合、y メンバは常にゼロである。デカルト座標を使用するには、lFlags メンバの DIEFF_CARTESIAN を指定して、x と y の両方を指定する必要がある。
極座標は、エフェクトに対して設定されたゼロポイント (真北) から時計回りに、実角度の 100 倍の単一角度で表される。通常これは負側の y 軸、すなわち、ユーザーから遠ざかる方向である。したがって、極座標 9,000 のエフェクトは通常、東の方向つまりユーザーの右側の方向を持つ。このエフェクトを打ち消すには、ユーザーは右側へ力を加えなければならない。
デカルト座標は 3 次元ベクトルに似ており、3 次元環境においてフォースをユーザーの向き設定に一致させる場合に非常に便利である。中心を始点 (0,0) とするグラフ用紙に直線を引くと、その直線の方向は、始点からの距離とは関係なく、交点の任意の座標により定義することができる。したがって、方向 (1, -2) と方向 (5, -10) はまったく同じものとなる。
注 : フォース フィードバック エフェクトの作成に使用する座標は方向のみを定義し、マグニチュードや距離は定義しない。
「エフェクトの作成」での例では、2 次元フォースの方向は極座標で定義される。この例ではフォースは南方向、すなわちユーザーの方向から来ているので、ユーザーがフォースを打ち消すにはスティックを手前に引き寄せなくてはならない。方向は北から時計回りに 180 度であり、次のように割り当てられている。effectInfo は有効な DIEFFECT 型である。
effectInfo.x = 18000
effectInfo.y メンバは 0 に設定しなければならず、デフォルトで 0 である。より明確にするために、割り当ては次のように表すこともできる。
effectInfo.x = 180 * DI_DEGREES
デカルト座標でこれと同じことを実現するにはどうしたらよいだろうか。lFlags メンバの DIEFF_CARTESIAN フラグを使用すると仮定すれば、次のように方向を指定することになる。
effectInfo.x = 0 effectInfo.y = 1
x の値が 0 である限り、y の値がどのような数値であっても、エフェクトは同じになる。指示されているのが方向だけで、マグニチュードが指示されていないからである。エフェクトの方向についての理論は、理解するのは難しいかもしれないが、実践してみればかなり容易に理解できる。
次のコードは、DirectInputEffect オブジェクトの dieff で表されるフォースの方向を反転する例である。dieff は、グローバル DIEFFECT 型の effectinfo を使って作成済みである。
effectInfo.lFlags = DIEFF_CARTESIAN effectInfo.X = effectInfo.X * -1 effectInfo.Y = effectInfo.Y * -1 Call dieff.SetParameters(effectInfo, DIEP_DIRECTION)
その他のサンプル コードについては、「エフェクト方向設定の実例」を参照すること。