JBox2D - 查找碰撞坐标

时间:2015-08-11 00:10:33

标签: java box2d physics collision jbox2d

我正在使用JBox2D用Java编写程序。我需要找到两个纹理之间的确切碰撞点,如果它们碰撞的话。

我有代码来确定是否发生了碰撞,并且显然可以调用碰撞对象ID来确定哪些纹理发生碰撞。

我似乎无法弄清楚如何抓住碰撞本身的实际坐标。我阅读了文档,但它非常复杂,并没有直接解决这个问题。

这是我的代码:

import org.jbox2d.callbacks.ContactImpulse;
import org.jbox2d.callbacks.ContactListener;
import org.jbox2d.collision.Manifold;
import org.jbox2d.common.Vec2;
import org.jbox2d.dynamics.Fixture;
import org.jbox2d.dynamics.contacts.Contact;


public class MyContactListener implements ContactListener{


    //When they start to collide
    public void beginContact(Contact c) {

    System.out.println("CONTACT");

    Fixture fa = c.getFixtureA();
    Fixture fb = c.getFixtureB();

    Vec2 posA = fa.getBody().getPosition();
    Vec2 posB = fb.getBody().getPosition();



}

public void endContact(Contact c) {

}

public void preSolve(Contact c, Manifold m) {}

public void postSolve(Contact c, ContactImpulse ci){}

}

1 个答案:

答案 0 :(得分:1)

要知道发生碰撞的位置,你应该知道有时不仅有一个碰撞点,而且还有一组点。

extracted from manual

(从this manual中提取的图像)

正如上面的手册所说:

  

Box2D具有计算重叠形状的接触点的功能。 [......]这些要点将它们分为多种结构。 [...]

     

通常,您不需要直接计算接触流形,但是您可能会使用模拟中产生的结果。[...]如果您需要这些数据,通常最好使用{{3结构[...]。

您可以在return (new MyClass()).Select(x => x); 课程中访问它:

Contact c

重要:我从未使用过这个库(JBox2D),但我熟悉它(因为libGDX显然使用类似的(Box2D))。另外,我不知道JBox2D是否是Java的Box2D(C ++版),如果JBox2D和Box2D(libGDX版本)完全相关。因此,某些方法可能会发生变化(public void beginContact(Contact c) { System.out.println("CONTACT"); WorldManifold worldmanifold; worldmanifold = c.getWorldManifold(); for(Vec2 point : worldmanifold.points){ System.out.println("Contact at : [" + point.x + ", " + point.y "]"); } } 可能是point.x)。

您也可以查看WorldManifold,但这是针对C ++的(我用他们的答案回答你)。