2013-03-10 39 views
2

我第一次使用libgdx和jBox2D(儘管我之前在其他環境中使用過Box2D)。libgdx/jBox2d在碰撞時增加幻像物體?

我創建了一個大的動態物體,以及兩個較小的靜態物體。我的身體似乎永遠不會接觸。相反,它似乎是系統在我的身體之間創造出真正微小的身體......我不知道爲什麼!

下圖中的上半部分顯示正在進行中的碰撞(右側),以及將要發生的碰撞(左側未加陰影的形狀)。

下圖中的下半部分是稍後的幾個步驟。大陰影的形狀已經圍繞第一個碰撞點旋轉,並與未遮蔽的形狀「碰撞」。

在每次碰撞的地點都有一個小紅點,似乎阻止了形狀的接觸。我已經在多個尺度上嘗試過,結果相似。我試着用Google搜索和搜索這個網站的人有同樣的問題,沒有運氣。

Picture of jBox2D misbehavior

回答

1

每個多邊形有一個額外的小 「半徑」,文檔中的描述:

/** 
    * The radius of the polygon/edge shape skin. This should not be modified. 
    * Making this smaller means polygons will have and insufficient for 
    * continuous collision. Making it larger may create artifacts for vertex 
    * collision. 
    */ 
    public static float polygonRadius = (2.0f * linearSlop); 

其中採用linearSlop,定義:

/** 
    * A small length used as a collision and constraint tolerance. Usually it 
    * is chosen to be numerically significant, but visually insignificant. 
    */ 
    public static float linearSlop = 0.005f; 

因此,這意味着你要要麼

  • 增加您的圖紙尺寸以適應此,或
  • 使您的座標系更大,因此此空間(0.02)不明顯。

我會建議第二個。如果你的座標系太小(或大),它可能會有其他性能影響。

0

所以,儘可能接近我可以計算,這種情況是一個小的(但很重要)與多邊形的外觀細節。

http://www.box2d.org/manual.html#_Toc258082970 ...向下滾動到4.4底部)

多邊形在其周圍,用於防止相互滲透一種無形的皮膚,但這個皮膚不被Box2D的調試視圖繪製。由於我根據多邊形調整了紋理大小(而不是多邊形加上皮膚),因此存在明顯的間隙。

長話短說,我們必須自己解釋皮膚。

如果您有更多信息或更好的解釋,我很樂意聽到它! :-)