我试图创建一个函数来检查我的矩形自定义类" Room"之间的重叠。 基本上我想运行循环来将我游戏中的所有房间彼此分开。
所以我希望能够检查2个房间,使用它们的起始位置(房间的左下角)以及高度和宽度来检查它们的区域是否重叠。我不确定最好的办法是什么。基本上我的想法是检查每个水平"线" /侧面对着另一个房间的垂直线,反之亦然。但是,我不确定最好的方法是什么。
提前致谢!
My Room课程基本上是:
public class Room {
public Point position {get; set;}
public int width {get; set;}
public int height {get; set;}
public Room(Point p, int w, int h) {
position = p;
width = w;
height = h;
}
public bool Intersects(Room other) {
//This is where I need help.
}
}
Point看起来像这样,基本上是为了避免漂浮/双打。
public class Point {
public int x {get; set;}
public int y {get; set;}
public Point(int x, int y) {
this.x = x;
this.y = y;
}
}
答案 0 :(得分:0)
一切都始于你的脑海,所以抓一支笔和纸:)
1。绘制一个房间和左下角的粗体,因为它是你的点(我们称之为PointA)。 2. 在Room中绘制一个Point(PointB)并检查与您的Point相关的坐标,您将看到相关性(PointB.X< = PointA + Room width和PointB.Y< = PointB +房间高度)
执行相同的切换点并记住int可以具有负值
干杯!
答案 1 :(得分:0)
一切都很简单。有很多选择 - 其中之一:
public bool Intersects(Room other)
{
if (other == null)
return false;
var r1 = new { Left = this.position.X, Right = this.position.X + this.width, Bottom = this.position.Y, Top = this.position.Y + this.height };
var r2 = new { Left = other.position.X, Right = other.position.X + other.width, Bottom = other.position.Y, Top = other.position.Y + other.height };
return r2.Right > r1.Left && r2.Bottom < r1.Top && r2.Top > r1.Bottom && r2.Left < r1.Right;
}