Защо обектите се припокриват с CGRectIntersectsRect?

Създавам пъзел игра, за която трябва да местите обект около препятствия, за да достигнете целта си. По някаква причина обаче обектите се припокриват, когато използвам 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;
        }
    }

Това кара обектите да се припокриват при удар, което създава проблеми при опит за преместване на обекта в различна посока. След много различни опити, за живота си, не мога да накарам обекта да спре, когато докосне ръбове с препятствия. Как мога да накарам това да се случи?


person TheEliteTech    schedule 18.08.2014    source източник


Отговори (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 функция, която да определи дали два правоъгълника се докосват, но бихте могли да напишете такава, която итерира през 4-те възможности.

person Aaron Brager    schedule 19.08.2014
comment
(Без връзка с въпроса ви, може да искате да разгледате откриване на сблъсък в SpriteKit, само предположение от вашия примерен код.) - person Aaron Brager; 19.08.2014