box2d的联系人监听器无法正常工作

时间:2015-06-06 12:58:05

标签: libgdx box2d

我有两具尸体。一个圆圈内有一个球,另一个圆圈内有多边形。我试图检测身体内的精灵之间的碰撞而不是身体本身,如下面的代码片段所示。

 @Override
 public void beginContact(Contact contact) {
Body a = contact.getFixtureA().getBody();
Body b = contact.getFixtureB().getBody();

if(contact.isTouching()){ 
    System.out.println(contact.isTouching());
    if (a.getUserData() == Constants.Enemy || b.getUserData() == Constants.Enemy) {
        System.out.println("yes");
    } 
  }
}

上面的方法打印出来"是"当身体处于如下图所示的阶段时,因为精灵没有相互接触。有什么想法吗?

enter image description here

2 个答案:

答案 0 :(得分:0)

可能还有另一种做法,但如果我想要更准确,可以使用此工具 - > http://www.aurelienribon.com/blog/projects/physics-body-editor/

如果您遇到任何初始错误,可以查看这些问题可能是充电器错误 - >  Physics Body Editor error

在此回复中

或此BodyEditorLoader - noSuchMethod,公开使用在libgdx(1.5.x)中适合我的充电器

我希望能帮助

<强>更新

你说: 感谢你,但我不确定这是否会对我有所帮助。

Box2d最初假设你不知道你的精灵,位置或任何东西。他“box2d”只知道固定装置等。如果你的精灵与灯具的尺寸不匹配,不知道,没有发生故障,但是你会发现不同的东西。

因此,使用该工具,我说,您可以更灵活地调整灯具的形状。

这是一个可以模拟的图像,夹具是Gimp中的图像,只是为了看到这个想法:

enter image description here

答案 1 :(得分:0)

像Angel Angel一样说,

Box2D具有检测碰撞的边界体积,这些碰撞不是像素完美的,并且对Sprite本身一无所知。这是出于性能原因,因为碰撞检测对性能有很大影响。

解决方案是使边界框更准确。您可以使用PolygonsShapes或使您的边界矩形更小。

在您的情况下,我会考虑使用PolygonShape。