我一直在使用 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范围内的一个变量。