JBox2D - 查找碰撞坐标

JBox2D - Find collision coordinates

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

我有确定是否发生碰撞的代码,并且显然可以调用碰撞对象 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){}

}

要知道哪里发生了碰撞,就要知道有时候碰撞的点不是只有一个点,而是一组点。

(图片摘自this manual

正如上面的手册所说:

Box2D has functions to compute contact points for overlapping shapes. [...] These points [...] groups them into a manifold structure. [...]

Normally you don't need to compute contact manifolds directly, however you will likely use the result produced in the simulation.[...] If you need this data, it is usually best to use the WorldManifold structure [...].

您可以在 Contact c class:

中访问它
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 "]");
    }
}

重要:我从未使用过这个库 (JBox2D),但是,我很熟悉它(因为 libGDX 显然使用了类似的库 (Box2D) ).另外,我不知道 JBox2D 是否是 Java 的 Box2D(C++ 之一),以及 JBox2D 和 Box2D(libGDX 一个)是否相关。所以也许有些方法可以改变(point.x 可能是 point.getX())。

你也可以检查 this site,但这是针对 C++ 的(我使用他们的答案来回答你)。