2010-07-17 2 views
0

볼보기와 무대보기가있는 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

음, 나는 여러 가지 일을합니다.

먼저 공을 나타내는 NSObject 하위 클래스 인 "모델"공을 만듭니다. 아마, 그것은 CGRect 인 속성 "location"또는 뭔가를 가질 것입니다.

그런 다음 현재보기에는 화면에 볼 개체 배열이있을 수 있습니다.

전반적으로 UIView의 rect를 사용하는 것이 충돌 감지를 관리하는 가장 좋은 방법이라고 생각하지 않습니다. 다른 방법으로 정의하는 것이 더 나을 것 같아요. 그에 따라 UI를 간단히 업데이트하는 것이 좋습니다.

일반적으로 게임 디자인을 위해 UI 구현에 의존하는 것은 좋지 않습니다. 그것은 (당신이 질문에 적어 두었 듯이) 변경하기가 어렵습니다.

+0

스퀘어는 마스터 uiimageview 내에 있으므로이 뷰를 둘러싼 다음 뷰를 이동하여 해당 뷰에 포함 된 모든 뷰를 이동할 수 있습니다. 실제로 제안한 방식대로 시작했지만 처리하는 것이 더 느릴 수도 있다고 생각했습니다. 당시에는 루프를 구현하지 않았지만 코드가 더 길어 보였지만 탐지를위한 코드가 적었습니다. 결국 오픈 GL로 이동하고 싶지만 uiimageviews는이 프로젝트에서 잘 작동합니다. 조언 해주셔서 감사합니다! – Damonmath

+0

당신을 진심으로 환영합니다. OpenGL을 사용하는 경우 Cocos2D 또는 3D, SIO2와 같은 라이브러리를 사용하는 것이 좋습니다. – makdad