2013-09-22 41 views
2

我注意到以下幾點:在兩個SKPhysicsBody對象之間創建SKPhysicsJoint會禁用它們之間的碰撞檢測嗎?

  1. 如果我創建一個物理邊界(bodyWithEdgeLoopFromRect)和每一個圓形固體物理體(bodyWithCircleOfRadius)兩個節點的場景,在添加這些2個節點現場,他們如預期的那樣,可以相互碰撞並與場景的邊界相碰撞。
  2. 但是,如果我在兩個節點之間添加任何類型的關節,則它們之間的關節約束條件成立,並且它們都可以與場景的邊界發生碰撞。但他們不再相互碰撞。

這看起來像是一個bug。我期望物理實體之間的任何關節都將是它們的基本碰撞機制的補充。有沒有人遇到類似的行爲,或者有什麼暗示我可能會做錯什麼? (因爲SpriteKit使用Box2d,所以這可能是一個我不知道的box2d已知問題)。因爲SpriteKit使用Box2d,所以這可能是一個box2d已知問題,我不知道)。

回答

0

是的,這是Box2D的默認行爲。我相信box2d你可以覆蓋它,但建議不要。原因是聯合體上的碰撞物體將與聯合界限相抵觸,反之亦然,從而引起模擬中的不穩定性。其結果是,兩個正在努力解決其共同約束和相互碰撞響應的機構引入了額外的力量。

+0

謝謝。但是,那麼,你如何在box2D中建模一些東西,比如說用繩子連接的兩個球? – SaldaVonSchwartz

+0

我想你會使用繩索接頭,但不幸的是它不包含在Sprite Kit中。 – LearnCocos2D

+0

它是:SKPhysicsJointLimit,它確實是我正在使用的關節的類型。但問題是,它只有maxLength,所以兩個節點受到限制,通過它不能遠遠超過maxLength,但仍然可以一起移動,儘可能多地彼此交叉,這正是我想要避免的。雖然現在我將節點的中心聯繫在一起。也許我應該把它們固定在邊界的邊緣上呢? – SaldaVonSchwartz

相關問題