如何检测cocos2d中sprite的碰撞

时间:2013-04-08 07:08:20

标签: iphone ios cocos2d-iphone ccsprite

我想检测精灵与另一个精灵的碰撞。但我想检查精灵是否被其他精灵的左侧部分触摸或与精灵的右侧部分接触。 我使用下面的代码来检测碰撞。但这会检测到整体碰撞(精灵在其他精灵的任何一点都被触摸过)。但如果精灵被触摸到其他精灵的正面,则想要计数为碰撞。

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

任何人都知道如何做到这一点?

2 个答案:

答案 0 :(得分: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) {

}

答案 1 :(得分:3)

默认情况下,在cocos2d中,CCSprite的锚点是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
    }
}