私はVector2とXNAを使用してきましたが、ゼロベクトルでNormalize()メンバー関数を呼び出すと、{NaN、NaN}のベクトルに正規化されることがわかりました。これはすべてうまくいっていますが、私の場合は、代わりにゼロベクトルのままにしておくことをお勧めします。
このコードをプロジェクトに追加すると、かわいい拡張メソッドが有効になります。
using ExtensionMethods;
namespace ExtensionMethods
{
public static class MyExtensions
{
public static Vector2 NormalizeOrZero(this Vector2 v2)
{
if (v2 != Vector2.Zero)
v2.Normalize();
return v2;
}
}
}
残念ながら、このメソッドは、この拡張メソッドを呼び出すために使用するベクトルを単純に正規化するのではなく、正規化されたベクトルを返します。代わりに、 vector2Instance .Normalize()のように動作させたいと思います。
これを無効にする以外に、「v2」が変更されるようにこれを調整するにはどうすればよいですか?(基本的に、「this」オブジェクトにアクセスする必要があります。または、「v2」を参照して渡す必要があります。)
編集:
そして、はい、私はこれを試しました:
public static void NormalizeOrZero(this Vector2 v2)
{
if (v2 != Vector2.Zero)
v2.Normalize();
}
動作しません。v2はNormalizeOrZeroのスコープ内の単なる変数です。