2013-10-18 3 views
0

이미지가 다른 지점 위로 이동하면 어떤 일이 일어나길 원하는 앱을 만들고 있습니다. 이러한 으로 제 I은 특정 장소에 오면 후 다른 영상이 지점에서 아래로 이동 ', 화상은 화면 전체를 수평 이동CGPointEqualToPoint가 작동하지 않습니다.

self.ball.center = CGPointMake(self.ball.center.x + self.gravity.x/8.0 * 200.0, 9); 

있다.

CGPoint a = CGPointMake(9, 9); 
if (CGPointEqualToPoint(ball.center,a)) { 

       balla.hidden = NO; 
       self.balla.center = CGPointMake(self.balla.center.x , (self.balla.center.y)- (self.gravity.y/8.0 * 200.0)); 
      } 

처음에는 제대로 작동하지만 다른 문장을 다른 곳으로 옮기려면 다음 문장을 넣을 때 아무 일도 일어나지 않습니다.

CGPoint b = CGPointMake(86, 9); 
      if (CGPointEqualToPoint(ball.center,b)) { 

       ball2a.hidden = NO; 
       self.ball2a.center = CGPointMake(self.ball2a.center.x , (self.ball2a.center.y)- (self.gravity.y/8.0 * 200.0));} 

일부 부동 소수점 값 오프셋을 추가하여 공을 이동하는 경우이

+2

'ball.center'를 로깅하여 값이 무엇인지 확인하십시오. – rmaddy

답변

1

를 작동하지 않는 이유에 모든 아이디어, 당신은 점 b "스킵"될 수 있습니다 - 당신은 할 수 있습니다 결코 b를 치지 않고 오히려 그것보다 약간 앞에 나타나고, 조금 뒤에서 나타난다.

포인트와 평등한지 테스트하는 것이 아니라 볼과 포인트 사이의 거리를 비교하여 작은 반경 안에 있는지 확인하는 것이 좋습니다. 간단한 유클리드 거리가 작동 할 수 있습니다. 당신이했습니다 점을 "명중"경우

CGFloat euclid_dist(CGPoint a, CGPoint b) 
{ 
    return sqrt((b.x-a.x)*(b.x-a.x) + (b.y-a.y)*(b.y-a.y)); 
} 

그런 다음 볼이를 사용할 수 있습니다

if (euclid_dist(ball.center, b) < 0.1) 
{ 
    // React appropriately 
} 

일반적으로는 부동 소수점 숫자 사이의 평등을 테스트하는 문제입니다.

+0

당신은 이것에 옳았습니다. 나는 수표 몇 자리에 나가서 소수점 두 자리를 반올림하고 백을 곱하기로 결정했다. 이제는 잘 작동합니다. 감사. 추가 문제가 있지만 별도로 게시 할 예정입니다. – user1114881