Обнаружение столкновений с использованием нескольких подвидов в движущемся виде - PullRequest
0 голосов
/ 18 июля 2010

Я работаю над игрой в OBJ C, которая имеет вид шара и вид сцены.Сценическое представление имеет 4 подпредставления.Все представления являются UIImageViews.У меня есть метод обнаружения столкновений, который работает.Я хотел бы расширить его на более чем 4 подпредставления, не создавая больше строк кода.Глядя на код ниже, есть ли способ упростить это в циклы вместо этого.Спасибо!

// convert each square to be relevant to ball's superview in order to collision detect
CGRect square_01Frame = [ball.superview convertRect:square_01.frame fromView:square_01.superview];
CGRect square_02Frame = [ball.superview convertRect:square_02.frame fromView:square_02.superview];
CGRect square_03Frame = [ball.superview convertRect:square_03.frame fromView:square_03.superview];
CGRect square_04Frame = [ball.superview convertRect:square_04.frame fromView:square_04.superview];

// convert CGRects to NSStrings for storage in square_frames array
NSString *square_01FrameString = NSStringFromCGRect(square_01Frame);
NSString *square_02FrameString = NSStringFromCGRect(square_02Frame);
NSString *square_03FrameString = NSStringFromCGRect(square_03Frame);
NSString *square_04FrameString = NSStringFromCGRect(square_04Frame);    

// load array of NSStrings
[square_frames replaceObjectAtIndex:0 withObject:square_01FrameString];
[square_frames replaceObjectAtIndex:1 withObject:square_02FrameString];
[square_frames replaceObjectAtIndex:2 withObject:square_03FrameString];
[square_frames replaceObjectAtIndex:3 withObject:square_04FrameString];

// create a for loop
for (int i=0; i<4; i++) { // 4 squares
    // create test frame
    CGRect test_frame = CGRectFromString([square_frames objectAtIndex:i]);
    if (CGRectIntersectsRect(test_frame,ball.frame)) { // collision detection
        // do something
    }
}

1 Ответ

1 голос
/ 18 июля 2010

Ну, я бы сделал несколько вещей.

Во-первых, я бы создал "модель" шара, просто подкласс NSObject для представления шара. Вероятно, это будет иметь свойство "location" или что-то, что является CGRect.

Тогда ваше текущее представление может иметь массив шаровых объектов на экране, и просто проходить через них.

В целом, однако, я не думаю, что использование протоколов UIView - лучший способ управлять обнаружением столкновений. Я думаю, вам лучше определить это другим способом, а затем просто соответствующим образом обновить интерфейс.

Как правило, не стоит полагаться на реализацию пользовательского интерфейса при разработке игр. Это затрудняет изменение (как вы отмечаете в своем вопросе).

...