-1

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

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

有人知道怎么做吗?

4

2 回答 2

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) {

}
于 2013-04-08T08:43:50.307 回答
3

在 cocos2d 中默认情况下,CCSprite 的锚点是 ccp(0.5, 0.5),它修改了精灵位置的比较。比较位置以检查游戏循环中精灵之间的相对距离,我认为相等运算符不是最佳选择,大于/小于等于更好地准备不同的位置情况,精灵移动步骤。

为了更好地理解,我包括了精灵情况,例如:

在此处输入图像描述

要检查相对位置(检测精灵在另一个精灵的哪一侧),您可以在碰撞检测检查中进行编程:

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
    }
}
于 2013-04-08T09:21:02.007 回答