我正在与许多不同类别的机构进行游戏。当用户移动一个物体并将其与另一个物体碰撞时,它们相互粘合。当三个身体完全粘在一起时,它们会消失。
身体有一个特定类别的掩码和一般识别身体的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有添加或删除关节的方法,但我找不到列出参与关节的身体的方法。我需要列出这些物体,以便检查哪些物体被胶合,看它们是否超过一定数量并移除它们。
答案 0 :(得分:0)
allContactedBodies
方法确实不会返回参与联合的机构。
要列出参与关节的身体,您有两个开箱即用的选项:
1)newJoint.bodyA.node
和newJoint.bodyB.node
吸气剂将返回每个关节中的2个物体
2)更好的是,反过来 - 枚举你所有节点的主体并使用physicsBody.joints
属性 - 这将返回此主体连接的关节数组,然后比较关节以获得实际胶合体组。