2013-04-08 130 views
-1

我想檢測精靈與其他精靈的碰撞。但我想檢查精靈是否與其他精靈的左邊部分接觸或與精靈的右邊部分接觸。 我正在使用下面的代碼來檢測碰撞。但是這會檢測整個碰撞(在其他精靈的任何點碰到精靈)。但是如果精靈被觸碰到其他精靈的正面,則想要計數就像碰撞一樣。如何檢測cocos2d中精靈的碰撞

if (CGRectIntersectsRect(sprite1.boundingBox, sprite2.boundingBox)) { 
      NSLog(@"sprite1 to delete"); 
} 

任何人都知道如何做到這一點?

+0

檢測sprite影響X和Y位置。 – Tirth 2013-04-08 07:15:53

+0

@i人我試過但知道要編碼它 – KsK 2013-04-08 07:21:16

回答

5

你能比較碰撞時精靈的位置嗎?

假設sprite1.anchorpoint,sprite2.anchorpoint = ccp(0,0)。在一次檢測到碰撞時:

// left part of sprite 1 touched right part of sprite 2 
if (sprite1.position.x == sprite2.position.x + sprite2.contentSize.width.x) { 

} 
// right part of sprite 1 touched left part of sprite 2 
else if (sprite1.position.x + sprite1.contentSize.width.x == sprite2.position.x) { 

} 
3

默認情況下在cocos2d一個CCSprite的anchorpoint是CCP(0.5,0.5),其修改子畫面的位置的比較。 比較位置以檢查遊戲循環中精靈之間的相對距離,我認爲相等運算符不是最佳選擇,大於/小於等於更好地準備不同的位置情況,精靈移動步驟。

爲了更好地理解我包括例如精靈情況:

enter image description here

要檢查的相對位置(檢測一個精靈是在其他精靈何邊),你有不同的選擇,程序您的碰撞檢測檢查:

1)

if (CGRectIntersectsRect(sprite1.boundingBox, sprite2.boundingBox)) { 
    CGPoint diff = ccpSub(sprite1.position, sprite2.position) 
    if (diff.x<=0) { 
     // sprite1 is on the left side 
    } else { 
     // sprite1 is on the right side 
    } 
} 

2)

if (CGRectIntersectsRect(sprite1.boundingBox, sprite2.boundingBox)) { 
    if (sprite1.position.x <= sprite2.position.x) { 
     // sprite1 is on the left side 
    } else { 
     // sprite1 is on the right side 
    } 
}