libgdx / jBox2d在碰撞时添加幻影体?

时间:2013-03-10 10:55:15

标签: box2d libgdx collision jbox2d

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

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

下图中的上半部分显示正在进行的碰撞(右侧),以及即将发生的碰撞(左侧,无阴影形状)。

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

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

Picture of jBox2D misbehavior

2 个答案:

答案 0 :(得分: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)不明显。

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

答案 1 :(得分:0)

所以,尽可能接近我的想象,这种情况是与多边形皮肤相关的一个小的(但很重要的)细节。

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

的底部

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

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

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