2013-03-10 69 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的调试视图绘制。由于我根据多边形调整了纹理大小(而不是多边形加上皮肤),因此存在明显的间隙。

长话短说,我们必须自己解释皮肤。

如果您有更多信息或更好的解释,我很乐意听到它! :-)