将 2 个 vector2 点转换为 xna/monogame 中的矩形
Convert 2 vector2 points to a rectangle in xna/monogame
我有一些代码可以检测点击和拖动动作的起点和终点,并将其保存为 2 个 vector2 点。然后我使用此代码转换:
public Rectangle toRect(Vector2 a, Vector2 b)
{
return new Rectangle((int)a.X, (int)a.Y, (int)(b.X - a.X), (int)(b.Y - a.Y));
}
上面的代码不起作用,谷歌搜索,到目前为止还没有定论。
谁能给我提供一些代码或公式来正确转换它?
注意:vector2 有一个 x 和一个 y,一个矩形有一个 x、一个 y、一个宽度和一个高度。
感谢任何帮助!谢谢
我认为您需要在其中加入额外的逻辑来决定将哪个矢量用作左上角以及将哪个矢量用作右下角。
试试这个:
public Rectangle toRect(Vector2 a, Vector2 b)
{
//we need to figure out the top left and bottom right coordinates
//we need to account for the fact that a and b could be any two opposite points of a rectangle, not always coming into this method as topleft and bottomright already.
int smallestX = (int)Math.Min(a.X, b.X); //Smallest X
int smallestY = (int)Math.Min(a.Y, b.Y); //Smallest Y
int largestX = (int)Math.Max(a.X, b.X); //Largest X
int largestY = (int)Math.Max(a.Y, b.Y); //Largest Y
//calc the width and height
int width = largestX - smallestX;
int height = largestY - smallestY;
//assuming Y is small at the top of screen
return new Rectangle(smallestX, smallestY, width, height);
}
我有一些代码可以检测点击和拖动动作的起点和终点,并将其保存为 2 个 vector2 点。然后我使用此代码转换:
public Rectangle toRect(Vector2 a, Vector2 b)
{
return new Rectangle((int)a.X, (int)a.Y, (int)(b.X - a.X), (int)(b.Y - a.Y));
}
上面的代码不起作用,谷歌搜索,到目前为止还没有定论。
谁能给我提供一些代码或公式来正确转换它?
注意:vector2 有一个 x 和一个 y,一个矩形有一个 x、一个 y、一个宽度和一个高度。
感谢任何帮助!谢谢
我认为您需要在其中加入额外的逻辑来决定将哪个矢量用作左上角以及将哪个矢量用作右下角。
试试这个:
public Rectangle toRect(Vector2 a, Vector2 b)
{
//we need to figure out the top left and bottom right coordinates
//we need to account for the fact that a and b could be any two opposite points of a rectangle, not always coming into this method as topleft and bottomright already.
int smallestX = (int)Math.Min(a.X, b.X); //Smallest X
int smallestY = (int)Math.Min(a.Y, b.Y); //Smallest Y
int largestX = (int)Math.Max(a.X, b.X); //Largest X
int largestY = (int)Math.Max(a.Y, b.Y); //Largest Y
//calc the width and height
int width = largestX - smallestX;
int height = largestY - smallestY;
//assuming Y is small at the top of screen
return new Rectangle(smallestX, smallestY, width, height);
}