为啥对象与 CGRectIntersectsRect 重叠?

Posted

技术标签:

【中文标题】为啥对象与 CGRectIntersectsRect 重叠?【英文标题】:Why Do Objects Overlap with CGRectIntersectsRect?为什么对象与 CGRectIntersectsRect 重叠? 【发布时间】:2014-08-18 23:53:06 【问题描述】:

我正在创建一个益智游戏,您必须在其中移动物体绕过障碍物才能到达目标。但是,由于某种原因,当我使用 CGRectIntersectsRect 时,对象会重叠。我希望对象在它们相互接触边缘时停止,而不是在它们相互重叠时停止。当前代码如下:

-(void)objectObstacleCollision 

if (CGRectIntersectsRect(object.frame, obstacle1.frame)) 
    xMotion = 0;
    yMotion = 0;

    if (objectMovingUp == YES) 
        objectCrashedUp = YES;
        objectMovingUp = NO;

        if (objectCrashedUp == YES && objectMovingUp == NO) 

            up.hidden = YES;
            down.hidden = NO;
            right.hidden = NO;
            left.hidden = NO;
        
    

这会导致对象在撞击时重叠,从而在尝试沿不同方向移动对象时导致问题。经过多次不同的尝试,在我的一生中,当物体碰到障碍物的边缘时,我无法让它停下来。我怎样才能做到这一点?

【问题讨论】:

【参考方案1】:

如果两个矩形共享一条边,它们不会相交,它们会接触。例如这段代码:

CGRect rect1 = CGRectMake(0, 0, 100, 100);
CGRect rect2 = CGRectMake(0, 100, 100, 100);

if (CGRectIntersectsRect(rect1, rect2)) 
    NSLog(@"The intersection rect is %@", NSStringFromCGRect(CGRectIntersection(rect1, rect2)));
 else 
    NSLog(@"The rects don't intersect.");

将输出“矩形不相交。”

没有内置的CGRect 函数来确定两个矩形是否接触,但您可以编写一个遍历这四种可能性的函数。

【讨论】:

(与您的问题无关,您可能想查看SpriteKit collision detection,只是从您的代码示例中猜测。)

以上是关于为啥对象与 CGRectIntersectsRect 重叠?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 DOM 对象在控制台中的显示与一般 Javascript 对象不同?

为啥即使创建了对象,django 也找不到与查询匹配的任何对象

为啥状态对象的名称不需要与setState中的名称匹配?

为啥 pytz localize() 不生成一个 tzinfo 与本地化它的 tz 对象匹配的 datetime 对象?

无法反序列化当前的JSON对象,为啥

为啥物体检测 CNN 的边界框必须与图像边界平行?