如何检测cocos2d中sprite的碰撞

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

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

有人知道怎么做吗?

你能比较碰撞时精灵的位置吗?

假设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) { } 

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

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

在这里输入图像说明

要检查相对位置(检测精灵在另一个精灵的哪一侧),在碰撞检测检查中您有不同的select来编程:

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 } }