XCode CGRect Столкновение с несколькими CGRects? - PullRequest
0 голосов
/ 28 мая 2011

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

if (CGRectIntersectsRect (ball1.frame, floor1.frame)) { }

if (CGRectIntersectsRect (ball1.frame, floor2.frame)) { }

if (CGRectIntersectsRect (ball1.frame, floor3.frame)) { }

if (CGRectIntersectsRect (ball1.frame, floor4.frame)) { }

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

.

Есть ли способ проверить коллизию с помощью оператора 1 if? Все элементы пола UIImageView имеют имена «floor1, floor2, floor3, floor4 и т. Д.»

Спасибо!

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

Ответы [ 2 ]

2 голосов
/ 28 мая 2011

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

for (int i = 0; i < num_tiles; i++) {
    if (CGRectIntersectsRect(ball1.frame, floor[i].frame)) {
         put code here
    }
}
0 голосов
/ 28 мая 2011

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

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

перед тем кодом, который никто не предложил.

...