我正在制作一个包含许多不同类别的身体的游戏。当用户移动一个物体并将其与同一类别的另一个物体碰撞时,它们会相互粘合。当三个身体总共粘在一起时,它们就会消失。
身体有一个位掩码,用于它的特定类别和一个 CNPhysicsCategoryGenBody 通常识别身体。这是一个游戏要求,因为还有其他参与碰撞的物体不受用户控制并且不会相互粘合。
粘合身体所涉及的 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 -allContactedBodies 方法不会返回关节中的实体。我认为这可能是因为身体连接到一个关节而不是另一个身体。
SKPhysicsWorld 有添加或删除关节的方法,但我找不到列出参与关节的物体的方法。我需要列出这些物体以检查哪些物体被粘合,看看它们是否超过一定数量并将它们移除。