我有一些layers
,其中包含CCSprites
。
我有一个主CCScene
,它在开始时添加这些图层。
我必须检查来自不同层的精灵之间的碰撞。
我知道如何检查与CGRectContains
的简单碰撞,我的问题是,我需要某种类来保存所有层中的所有精灵位置,并检查每个tick
碰撞。
问题:创建这样一个类的正确方法是什么,保存/检查场景中所有图层的精灵?
谢谢。答案 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。如果您对此感兴趣,请阅读以下链接: