1

C#/XNAで簡単なゲームを作っています。私のアクターは、行こうとしている方向を として保存しVector2ます。各更新サイクルで、見出しを正規化し (設定方法によって長さが異なる可能性があるため)、heading*Speed位置を追加してアクターを移動します。

これはエレガントではないようです。論理的には、方向には長さがなく、定義上は単位長です。実際には、定数の正規化には些細な余分な計算コストがあります。

  1. NormalizedVector2XNAにはありますか?
  2. XNA と互換性のあるものを作成するにはどうすればよいですかVector2(つまり、XNA に追加できます)。プロパティを拡張Vector2してオーバーライドしLengthますか?
  3. 私が達成しようとしていることをどのように達成しようとしているのかについて、より大きな概念上の問題はありますか?
4

3 に答える 3

2
  1. いいえ。2DベクトルはVector2XNAのみです。
  2. できません。ですのでVector2structsbuclassすることはできません。ただし、独自のタイプを作成し、それを(新しいを作成することによって)に変換するメソッドを提供することもできます。Vector2Vector2

現実的には、現在のアプローチを疑っています(NormalizeVector2を使用して呼び出すだけが最善のアプローチである可能性があります。多くの呼び出しが本当に心配な場合は、パラメーターにを使用するオーバーロードを使用してください。少し効率的です。refout

于 2012-10-13T01:26:51.403 に答える
0
  1. 私が知っているわけではない
  2. 前述のように、Vector をサブクラス化することはできませんが、計算を処理し、Vector2 に解析できるか、Vector プロパティを持つだけの Direction クラスを作成できます。
  3. ユニタリ ベクトルを使用し、行列を使用して回転させます。パフォーマンスの面では、通常は処理が遅い除算を回避します。論理的にも、方向を x + y ではなく、左 30° として表現する方が一般的です。
于 2012-10-13T01:47:15.020 に答える
-2

何か不足していますか?正規化されたベクトルは、x + y の合計が 1 で、ある方向を指すベクトルです。ベクトルには長さがありません。

正規化されたベクトルを同じタイプのベクトルに格納できます。もちろん、何かの方向を変える必要がある場合は、更新する必要があります。

ここで説明されているかなり単純な概念: http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.vector2.normalize.aspx

于 2012-10-13T12:14:19.723 に答える