2014-10-12 1 views
0

을 작동하지, 아무것도 내가 잘못 가고 디버거CGRectIntersectsRect이 코드를 실행하고 총알이 선을 통과 한 후 제대로

//This is for the button that shoots the bullet 
- (IBAction)shooterButton:(id)sender { 
    [self mover:(id)sender]; 
    [self viewDidCollidee]; 
} 

-(BOOL)viewsDoCollide { 
    CGRect bulletFrame = _bullet.frame; 
    CGRect lineFrame = _line.frame; 
    if(CGRectIntersectsRect(bulletFrame, lineFrame)) 
    { 
     return YES; 
    } 
    return NO; 
} 

-(void)viewDidCollidee { 
    bool collisionDetector = [self viewsDoCollide]; 

    if (collisionDetector == YES) { 
     NSLog(@"Collided!"); 
    } 
} 

- (void)mover:(id)sender { 
    CGRect bulletFrame = _bullet.frame; 
    CGRect lineFrame = _line.frame; 
    [UIView animateWithDuration:0.2 animations:^{ 
    CGRect newFrame = CGRectMake(bulletFrame.origin.x + lineFrame.origin.x + 15, bulletFrame.origin.y, bulletFrame.size.width, bulletFrame.size.height); 
     _bullet.frame= newFrame; 
    }]; 
} 

에 표시되지 않습니다? 나는 충돌에 대해 이미 많은 질문에 답했다. 나는 그것을 볼 수 없다. 충돌을 감지하는 다른 방법이 있습니까? 그렇지 않다면 어디서 잘못 될까요?

편집 : 나는 KirkSpaziani의 제안을했다하지만 변경 :

CGRect newFrame = CGRectMake(bulletFrame.origin.x + lineFrame.origin.x + 15, bulletFrame.origin.y, bulletFrame.size.width, bulletFrame.size.height); 

에 :

CGRect newFrame = CGRectMake(bulletFrame.origin.x + lineFrame.origin.x - 14, bulletFrame.origin.y, bulletFrame.size.width, bulletFrame.size.height); 

주, 그것은는 -14 대신 15의. 그러나 이렇게하면 이미지가 아직 충돌하지 않아도 충돌이 감지됩니다. 충돌이 실제로 발생할 때 충돌을 감지하는 방법. 당신이 이벤트

- (IBAction)shooterButton:(id)sender { 
    [self mover:(id)sender]; 
    [self viewDidCollidee]; 
} 

당신은 아마 viewDidCollidee (원문) 모든 프레임을 호출 할을 발사 할 때 충돌 경우에만 확인하는 것처럼

+0

'bulletFrame'과'lineFrame'에는 어떤 값이 있습니까? 디버거를 사용하십시오! –

+0

@KurtRevis 당신은 무엇을 의미합니까? 글 머리 기호와 선은 모두 UIImageVIew 속성이며 약하고 비 자연적인 속성입니다. –

답변

0

는 것 같습니다. 물체의 속도가 프레임 사이에 다른 물체 과거를 걸리는 경우 체크하지 않고 물체를 통과 할 수 있기 때문에

[UIView animateWithDuration:0.2 animations:^{ 
    CGRect newFrame = CGRectMake(bulletFrame.origin.x + lineFrame.origin.x + 15, bulletFrame.origin.y, bulletFrame.size.width, bulletFrame.size.height); 
    _bullet.frame= newFrame; 
    [self viewDidCollidee]; 
}]; 

이, 당신이 실제로 원하는 것을 아마 아직 없습니다.

+0

작동하지 않았으므로 총알이 줄을 곧장 통과했습니다 ... –

+0

글 머리 기호의 이전 위치에서 각 프레임의 현재 위치까지 바운딩 사각형을 그립니다. 한번 확인하면 다음과 같이 보일 것입니다 : [] |, 그러면 다음과 같이 보일 것입니다 : | [], 그래서 그들은 결코 하나의 프레임 체크에서 교차하지 않았다. 대신 이전 위치를 기억하고 다음과 같이 교차 검사를 수행하십시오. {[] | []}, 여기서 {...}는 실제 사용중인 rect를 나타냅니다. – KirkSpaziani

관련 문제