我正在製作一個包含許多不同類別物體的遊戲。當用戶移動一個物體並與另一個物體發生碰撞時,它們會相互粘合。當三個身體粘在一起時,它們消失了。PhysicsBody -allContactedBodies如何列出物理世界中的關節
機構有一個掩碼,它是特定的類別,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有添加或刪除關節的方法,但我找不到列出參與關節的身體的方法。我需要列出這些屍體,以便檢查哪些屍體是粘在一起的,看看它們是否超過了某個數字並將其刪除。
謝謝。我嘗試了一下physicsBody.joints,它列出了所有的物體。我發現的問題是試圖迭代通過所有的身體。組合的數量相當大。我決定創建一個數組來存儲連接的物體組,然後檢查數組是否包含超過物體的限制以將其全部移除。但問題是,身體可能實際上在聯合樞軸點移動,他們觸摸自己看起來像兩個團體再次聯合。我想我必須研究這個邏輯。無論如何感謝提示。 – zago