2

我是第一次使用 libgdx 和 jBox2D(虽然我之前在其他环境中使用过 Box2D)。

我创建了一个大的动态物体,和两个较小的静态物体让它着陆。我的身体似乎从来没有接触过。相反,似乎系统在我的身体之间创造了非常小的身体……我不知道为什么!

下图的上半部分显示了正在进行的碰撞(右侧)和即将发生的碰撞(左侧,未着色的形状)。

下图的下半部分是几步之后。大的阴影形状围绕第一个碰撞点旋转并与未着色的形状“碰撞”。

在每次碰撞的位置都有一个小红点,似乎阻止了形状的接触。我已经在多个尺度上尝试过,结果是相似的。我试过谷歌搜索并在这个网站上搜索有同样问题但没有运气的人。

jBox2D行为不端的图片

4

2 回答 2

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) 不明显。

我建议第二个。如果您的坐标系太小(或太大),它可能会产生其他性能影响。

于 2013-03-11T20:21:03.873 回答
0

因此,据我所知,这种情况是与多边形皮肤相关的次要(但重要)细节。

http://www.box2d.org/manual.html#_Toc258082970 ...向下滚动到 4.4 的底部)

多边形周围有一个不可见的皮肤,用于防止相互渗透,但 Box2D 调试视图不会绘制此皮肤。由于我根据多边形而不是多边形加上皮肤来调整纹理的大小,因此存在可见的间隙。

长话短说,我们必须自己考虑皮肤。

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

于 2013-03-11T02:06:37.370 回答