XNA - 检查Vector2是否在Rectangle内

时间:2012-01-21 00:00:17

标签: vector xna xna-4.0

检查Vector2是否在Rectangle内的最佳方法是什么?

myRect.contains(myVector2)不起作用,因为它需要一个Point或一个Rectangle。

我知道我可以将Vector2转换为Point或甚至是大小为1/1的Rectangle,但我不确定性能。

您有什么经历?

2 个答案:

答案 0 :(得分:4)

Contains结构的Rectangle的重载版本之一,采用X和Y坐标。

Rectangle rect = new Rectangle(-5, -5, 10, 10);
Vector2 myVector2 = Vector2.Zero;

rect.Contains((int)myVector2.X, (int)myVector2.Y)

我假设你在谈论代表一个点而不是一个距离或方向的myVector2

答案 1 :(得分:1)

虽然在施法中可能会有额外的执行时间与创建像Point这样的点(myVector2.X,myVector2.Y),但这种影响很可能太小而你无法注意到(通常应避免过早优化)

选择看起来最干净,更容易维护的东西。如果是我,我可能只是在方法调用中创建新点......

您也可以编写扩展方法。

    public static Point Origin(this Vector2 v)
    {
        //original proposal
        //return new Point( (int)v.X, (int)v.Y );

        //better! does correctly round the values
        return new Point( Convert.ToInt32(v.X), convert.ToInt32(v.Y));
    }

然后你可以做这样的事情rect.Contains(vec.Origin)

要记住的事情:这个方法实际上不会检查向量是否包含在矩形中,这只会检查原点是否存在。请记住,矢量的方向是幅度。