我正在编写游戏,我需要检测两个CGRect之间的交叉点。要做到这一点,我没问题。我喜欢这个:
CGRect rect1 = CGRectMake (x1, y1, a1, b1);
CGRect rect2 = CGRectMake (x2, y2, a2, b2);
if (CGRectIntersectsRect(rect1, rect2))
{
//do some stuff...
}
所以我没问题。但是,如果有可能知道这两个CGRect的精确交点? 如果可能,怎么样?
谢谢!
答案 0 :(得分:11)
使用CGRectIntersection()
function获取两个相交矩形的公共部分。从该函数调用的结果中,您可以使用CGRectGet[Max|Min][X|Y]()
functions计算矩形的边缘。
答案 1 :(得分:1)
我想我正在尝试做同样的事情。我想得到两个rects之间的具体重叠。我发现CGRectUnion非常有用,因为它给出了包含两个rects的最小rect。如果尺寸大于“max”,则表示rect与右侧或底部重叠。如果原点为负,则表示矩形与顶部或左侧重叠。我写了这个函数来给出纠正重叠所需的结果偏移量。
CGPoint GetOffsetBetweenFrames(CGRect maxBounds, CGRect frame)
{
CGRect frameUnion = CGRectUnion(maxBounds, frame);
CGPoint offset = CGPointZero;
if (CGRectGetMinX(frameUnion) < 0)
offset.x = -frameUnion.origin.x;
else if (CGRectGetWidth(frameUnion) > CGRectGetWidth(maxBounds))
offset.x = -(CGRectGetWidth(frameUnion) - CGRectGetWidth(maxBounds));
if (CGRectGetMinY(frameUnion) < 0)
offset.y = -frameUnion.origin.y;
else if (CGRectGetHeight(frameUnion) > CGRectGetHeight(maxBounds))
offset.y = -(CGRectGetHeight(frameUnion) - CGRectGetHeight(maxBounds));
return offset;
}
哦,还快速编辑:要将偏移量应用到如下简单:
offset = GetOffsetBetweenFrames(maxBounds, frame);
frame = CGRectOffset(frame, offset.x, offset.y);