我第一次使用libgdx和jBox2D(虽然之前我在其他环境中使用过Box2D)。
我创造了一个巨大的动态身体,以及两个较小的静态物体让它着陆。我的身体似乎从未接触过。相反,似乎系统在我的身体之间创造了非常小的身体......我不知道为什么!
下图中的上半部分显示正在进行的碰撞(右侧),以及即将发生的碰撞(左侧,无阴影形状)。
下面图片的下半部分是几步之后。大阴影形状围绕第一个碰撞点旋转,并与无阴影形状“碰撞”。
在每次碰撞的位置都是一个小红点,似乎阻止了形状的触碰。我在多个尺度上尝试了这个,结果很相似。我已经尝试使用谷歌搜索和搜索这个网站,找到有同样问题但没有运气的人。
答案 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;
所以这意味着你会想要
我会建议第二个。如果您的坐标系太小(或太大),它可能会产生其他性能影响。
答案 1 :(得分:0)
所以,尽可能接近我的想象,这种情况是与多边形皮肤相关的一个小的(但很重要的)细节。
(http://www.box2d.org/manual.html#_Toc258082970 ...向下滚动到4.4)
的底部多边形周围有一个看不见的皮肤,用于防止穿透,但Box2D调试视图不会绘制这个皮肤。由于我根据多边形调整纹理大小 - 而不是多边形加上皮肤 - 因此存在明显的间隙。
长话短说,我们必须自己考虑皮肤。
如果您有更多信息或更好的解释,我很乐意听到它! : - )