Ios7 PhysicsBody-所有ContactedBody如何在PhysicsWorld中列出关节

Ios7 PhysicsBody-所有ContactedBody如何在PhysicsWorld中列出关节,ios7,box2d,sprite-kit,skphysicsbody,skphysicsworld,Ios7,Box2d,Sprite Kit,Skphysicsbody,Skphysicsworld,我正在做一个游戏,有很多不同种类的身体。当用户移动一个物体并将其与同一类别的另一个物体碰撞时,它们会相互粘合。当三个物体被粘在一起时,它们就消失了 身体有一个特定类别的遮罩,还有一个CNPhysicalScategoryGenBody,用来识别身体。这是一项游戏要求,因为参与碰撞的其他身体不受用户控制,也不相互粘合 要粘合的身体所涉及的didBeginContact代码: // Here I clean the mask removing the CNPhysicsCategoryGenBody

我正在做一个游戏,有很多不同种类的身体。当用户移动一个物体并将其与同一类别的另一个物体碰撞时,它们会相互粘合。当三个物体被粘在一起时,它们就消失了

身体有一个特定类别的遮罩,还有一个CNPhysicalScategoryGenBody,用来识别身体。这是一项游戏要求,因为参与碰撞的其他身体不受用户控制,也不相互粘合

要粘合的身体所涉及的didBeginContact代码:

// Here I clean the mask removing the CNPhysicsCategoryGenBody and leaving the object particular
// category only.
uint32_t cleanMaskA = contact.bodyA.categoryBitMask ^ CNPhysicsCategoryGenBody;
uint32_t cleanMaskB = contact.bodyB.categoryBitMask ^ CNPhysicsCategoryGenBody;

// If the objects are of the same category create a joint
if (cleanMaskA == cleanMaskB) {

    SKPhysicsJointFixed *newJoint = [SKPhysicsJointFixed jointWithBodyA:contact.bodyA bodyB:contact.bodyB anchor:contact.contactPoint];
    [self.physicsWorld addJoint:newJoint];
}
到目前为止还不错。当我想列出附加到另一个实体的实体时,问题就出现了。SKPhysicsBody-AllContactedBodys方法不会返回关节中的实体。我想这可能是因为身体连接到一个关节,而不是另一个身体


SKPhysicsWorld有添加或删除关节的方法,但我找不到列出参与关节的实体的方法。我需要列出这些实体,以便检查哪些实体已粘合,查看它们是否超过一定数量,然后将其移除。

使用
allcontactedbody
方法确实不会返回参与关节的实体

要列出参与关节的实体,您有两个现成的选项:

1)
newJoint.bodyA.node
newJoint.bodyB.node
获取程序将返回每个关节中的2个实体

2) 更好的方法是,反过来-枚举所有节点的实体并使用
physicsBody.joints
属性-这将返回此实体连接到的关节数组,然后比较关节以获得实际的粘合实体组。

谢谢。我尝试了physicsBody.joints,它列出了所有的身体。我发现的问题是试图遍历所有的实体。组合的数量相当大。我决定创建一个数组来存储连接的实体组,然后检查数组中包含的实体是否超过限制以将它们全部删除。但问题是,这些身体实际上可以在关节枢轴点移动,它们接触自己,看起来就像两组人再次结合一样。我想我必须研究一下这个逻辑。无论如何,谢谢你的提示。