Почему объекты перекрываются с 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