2014-02-07 52 views
1

我正在製作一個包含許多不同類別物體的遊戲。當用戶移動一個物體並與另一個物體發生碰撞時,它們會相互粘合。當三個身體粘在一起時,它們消失了。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有添加或刪除關節的方法,但我找不到列出參與關節的身體的方法。我需要列出這些屍體,以便檢查哪些屍體是粘在一起的,看看它們是否超過了某個數字並將其刪除。

回答

0

allContactedBodies方法確實不會返回參與聯合的機構。

要列出參加一個聯合的機構,你有兩個出的現成的選項:

1)newJoint.bodyA.nodenewJoint.bodyB.node getter方法將返回2個機構在每個關節
2)更好的,反過來 - 列舉所有節點的物體,並使用屬性physicsBody.joints - 這將返回該物體所連接的關節的數組,然後比較關節以獲得實際的膠合物體組。

+0

謝謝。我嘗試了一下physicsBody.joints,它列出了所有的物體。我發現的問題是試圖迭代通過所有的身體。組合的數量相當大。我決定創建一個數組來存儲連接的物體組,然後檢查數組是否包含超過物體的限制以將其全部移除。但問題是,身體可能實際上在聯合樞軸點移動,他們觸摸自己看起來像兩個團體再次聯合。我想我必須研究這個邏輯。無論如何感謝提示。 – zago