层之间的碰撞检测

时间:2014-01-03 15:42:17

标签: cocos2d-iphone

我有一些layers,其中包含CCSprites。 我有一个主CCScene,它在开始时添加这些图层。 我必须检查来自不同层的精灵之间的碰撞。

我知道如何检查与CGRectContains的简单碰撞,我的问题是,我需要某种类来保存所有层中的所有精灵位置,并检查每个tick碰撞。

问题:创建这样一个类的正确方法是什么,保存/检查场景中所有图层的精灵?

谢谢。

1 个答案:

答案 0 :(得分:0)

如果你不关心空白区域,那么你可以为每一层设置self.contentSize。你可以这样做:

CGRect rect = CGRectNull;
for (CCNode *node in self.children) {
    rect = CGRectUnion(rect, node.boundingBox);
}
self.contentSize = rect.size;

但是如果你关心空的空间,那么你需要使用这样的东西:

// put it somewhere outside class implementation
static inline BOOL CCLayerIntersectsCCLayer(CCLayer l1, CCLayer l2) {
    for (CCNode *n1 in l1.children) {
        for (CCNode *n2 in l2.children) {
            CGRect r1 = n1.boundingBox;
            CGRect r2 = n2.boundingBox;
            r1.origin = [l1.parent convertToNodeSpace:r1.origin];
            r2.origin = [l2.parent convertToNodeSpace:r2.origin];
            if (CGRectIntersectsCGRect(r1, r2)) {
                return YES;
            }
        }
    }
    return NO;
}

但你必须明白,所有精灵(甚至圆圈)实际上都是矩形。因此,如果您需要非常精确的碰撞检测,那么您应该在项目中使用box2d。如果您对此感兴趣,请阅读以下链接: