1

我正在制作一个包含许多不同类别的身体的游戏。当用户移动一个物体并将其与同一类别的另一个物体碰撞时,它们会相互粘合。当三个身体总共粘在一起时,它们就会消失。

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

4

1 回答 1

0

allContactedBodies方法确实不会返回参与关节的实体。

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

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

于 2014-02-07T23:45:38.050 回答