2009-10-14 7 views
1

화면에서 벽돌을 동적으로 생성 할 수 있도록 UIImageView를 확장하는 클래스를 작성했습니다. 벽돌은 20x10 PNG입니다.UIView에서 UIImageView의 경계 상자 표시

여기 내 코드입니다 : 다음

- (id) initBrick:(NSInteger *)str x:(float)ptX y:(float)ptY { 
int brickIndex = arc4random() % 10 + 1; 
NSString *filename = [NSString stringWithFormat:@"brick%d.png", brickIndex]; 

UIImage *brickImage = [UIImage imageNamed:filename]; 
CGRect imageRect = CGRectMake(0.0f, 0.0f, 20.0f, 10.0f); 
[self initWithFrame:imageRect]; 
[self setImage:brickImage]; 
self.center = CGPointMake(ptX, ptY); 
self.opaque = YES; 
self.isDead = NO; 
return self; 
} 

, 나는 같은 클래스에서 간단한 충돌 감지 기능이 있습니다

- (BOOL)checkHit:(CGRect)frame { 
if(CGRectIntersectsRect(self.frame, frame)) { 
    isDead = YES; 
    return YES; 
} else { 
    return NO; 
} 

} 

을하지만 충돌 감지 잘 수행되지 않습니다. 테두리 상자가 내 이미지보다 약간 작게 보입니다. 내가 충돌을 확인할 수 있도록 경계 상자를 표시하는 방법은 무엇입니까?

코드가 명확하지 않은 경우 자세한 정보를 제공 할 수 있습니다.

답변

2

배경색을 설정하여 문제가 이미지로 인해 발생하지 않았는지 확인할 수 있습니다. 하지만 이미지가 단순한 불투명 한 사각형이라면 괜찮을 것입니다. checkHit 메서드에서 중단 점을 설정했는데 잠시 동안 self.frame이 제공하는 것을 확인하고 너무 어려울 수는 없습니다.

- (BOOL) checkHit: (CGRect) frame 
{ 
    return CGRectIntersectsRect(self.frame, frame); 
} 

이 코드는 경우도 작은 조금 더 읽을 것입니다 :

그리고 checkHit 방법으로, 당신은 checkAndSetHit, 또는 (더 나은)로 이름을 변경해야 하나 거기 dead 플래그를 설정하지 않는다 hitsFrame 또는 intersectsFrame으로 이름이 바뀌었지만 이는 단정 짓입니다.

+0

이에 동의하십시오. 보기의 틀을 실제로 그려보고 싶다면 클래스의 drawRect :를 재정 의하여 거기에서 그렇게하십시오. (슈퍼를 잊지 마세요!) –

+0

여러분의 의견을 보내 주셔서 감사합니다. isDead 코드를 메인 게임 클래스 코드로 다시 이동 시켰습니다. (p.s. 2 일 전부터 iPhone 프로그래밍을 시작했습니다. 정말 초보자입니다.) – Raptor

관련 문제