2013-10-18 35 views
0

我正在製作一個應用程序,讓我想要發生某些事情如果圖像移動到另一個點上。如 第一我有一個圖像在屏幕上水平地移動,」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