2011-03-10 250 views
0

我得到了2個精靈,球和箭頭。 箭頭不動。 球在它的錨點上旋轉。cocos2d旋轉精靈碰撞檢測

id rotate = [CCRotateBy actionWithDuration:.5 angle: 360]; 

我想在球到達箭頭時檢測碰撞。 嘗試了CGRectIntersectsRect,但它沒有檢測到碰撞。 有什麼幫助嗎? 謝謝...

回答

0

用圓圈圈的碰撞方法..這裏是方法..

-(float)asbs:(CGPoint)_arrowPos ballPos:(CGPoint)_ballPos 
{ 
    float x = _arrowPos.x-_ballPos.x; 
    float y = _arrowPos.y-_ballPos.y; 
    float xy = x*x+y*y; 

return xy; 
} 

if([self asbs:arrow.position ballPos:ball.position]<=size) 
{ 
//collision 
} 

注意,大小=球的半徑+箭頭半徑*球半徑+箭頭半徑

的上面的方法是使用(平方)+ b(平方)= c(平方)來檢查兩點之間的距離..

+0

嗨,感謝您的幫助。箭頭不是一個圓圈。想知道爲什麼尺寸變成尺寸=球半徑+箭頭半徑*球半徑+箭頭半徑 – moon 2011-03-10 03:39:00

+0

然後改變爲檢測半徑或檢測點? cos我們是比較平方點.. – xuanweng 2011-03-10 06:35:41

+0

嗨,我設置了球的位置 - 「ball.position = CGPointMake(85,85);.」旋轉時,球位置改變,但當我在控制檯打印時,「NSLog(@」球位置%f「,ball.position.x);」它無法檢測到當前位置。不斷打印出85份。 – moon 2011-03-15 01:52:08

1

你可能不想這個答案,但我會使用Box2D或Chipmunk並使用頂點Helper應用程序指定頂點。

+0

我正在嘗試使用Box2D。在我將anchorpoint(-1,-1)設置爲Sprite之後,Sprite和Groundbody不再彼此重疊。當精靈在(-1,-1)位置旋轉時,地面體保持原點旋轉。所以碰撞正在探測地面所在的位置。 :( – moon 2011-03-11 09:26:04

+0

在這種情況下,我會試試玄翁說的事情。 – tallen11 2011-03-11 23:47:49

0

您可能需要在更新方法中將球轉換爲世界空間,然後調用該球而不是球的位置。如果它位於父層中,則位置相對於其父層始終是靜態的。