Я работал с Vector2 и XNA и обнаружил, что вызов функции-члена Normalize() для нулевого вектора нормализует его до вектора {NaN, NaN}. Это все хорошо, но в моем случае я бы предпочел оставить их как Zero Vectors.
Добавление этого кода в мой проект позволило использовать симпатичный метод расширения:
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» был изменен? (По сути, мне нужен доступ к «этому» объекту или мне нужно, чтобы «v2» передавался по ссылке.)
Редактировать:
И да, я пробовал это:
public static void NormalizeOrZero(this Vector2 v2)
{
if (v2 != Vector2.Zero)
v2.Normalize();
}
Не работает, v2 — это просто переменная в области действия NormalizeOrZero.