Столкновение Xcode CGRect с несколькими CGRects?

Я создал игру, в которой у меня есть пол, состоящий из нескольких изображений разной высоты. (Поэтому пол не плоский). Вместо того, чтобы открывать миллион операторов if:

если (CGRectIntersectsRect(ball1.frame, floor1.frame)) { }

если (CGRectIntersectsRect(ball1.frame, floor2.frame)) { }

если (CGRectIntersectsRect(ball1.frame, floor3.frame)) { }

если (CGRectIntersectsRect(ball1.frame, floor4.frame)) { }

//и так далее...

.

Есть ли способ проверить столкновение с помощью 1 оператора if? Все части пола UIImageView имеют имена «этаж1, этаж2, этаж3, этаж4 и т. д.».

Спасибо!

Боковое примечание: если я хочу использовать код CGRectIntersect и поворачиваю изображение, я проверяю пересечение, потому что кажется, что оно по-прежнему проверяет только столкновение для кадра изображения, поэтому независимо от того, поворачиваю я его или нет, оно сталкивается в том же месте. Могу ли я повернуть рамку, чтобы исправить это, или мне нужно использовать другой код, если да, то какой?


person Albert Renshaw    schedule 28.05.2011    source источник


Ответы (2)


Хотя я не совсем понимаю ваш вопрос, я думаю, что могу предложить упрощение. Вместо того, чтобы называть плитки floor1, floor2, ..., вы должны вместо этого использовать массив. Таким образом, вы можете свернуть операторы if в 3 оператора:

for (int i = 0; i < num_tiles; i++) {
    if (CGRectIntersectsRect(ball1.frame, floor[i].frame)) {
         put code here
    }
}
person No One in Particular    schedule 28.05.2011

Определенно измените свою схему именования, item1, item2, item3 никогда не будут правильным вариантом, если их больше 2 или 3. Если нужно, просто скажи

NSMutableArray* floors = [NSMutableArray array];
[floors addObject:floor1];
[floors addObject:floor2];
[floors addObject:floor3];
... etc

Перед кодом, который предложил никто в частности.

person Thomson Comer    schedule 28.05.2011
comment
Ладно круто! Однако теперь я могу назвать их и просто использовать массив. Отлично! Так что это должно работать сейчас. - person Albert Renshaw; 28.05.2011