PhysicsBody -allContactedBodies如何列出PhysicsWorld中的关节

时间:2014-02-07 12:57:31

标签: ios7 box2d sprite-kit skphysicsbody skphysicsworld

我正在与许多不同类别的机构进行游戏。当用户移动一个物体并将其与另一个物体碰撞时,它们相互粘合。当三个身体完全粘在一起时,它们会消失。

身体有一个特定类别的掩码和一般识别身体的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有添加或删除关节的方法,但我找不到列出参与关节的身体的方法。我需要列出这些物体,以便检查哪些物体被胶合,看它们是否超过一定数量并移除它们。

1 个答案:

答案 0 :(得分:0)

allContactedBodies方法确实不会返回参与联合的机构。

要列出参与关节的身体,您有两个开箱即用的选项:

1)newJoint.bodyA.nodenewJoint.bodyB.node吸气剂将返回每个关节中的2个物体 2)更好的是,反过来 - 枚举你所有节点的主体并使用physicsBody.joints属性 - 这将返回此主体连接的关节数组,然后比较关节以获得实际胶合体组。