java - JBox2D - 查找碰撞坐标

标签 java box2d physics collision jbox2d

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

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

}

最佳答案

要知道碰撞发生在哪里,你应该知道有时碰撞不仅是一个点,而是一组点。

extracted from manual

(图片摘自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 类中访问它:

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++ 的(我用他们的答案来回答你)。

关于java - JBox2D - 查找碰撞坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31931135/

相关文章:

java - NoUniqueBeanDefinitionException : no qualifying bean of type. 我定义了一个匹配的 bean,但我发现了 2 个

java - 如何在libGDX中以相反的方式射击子弹

java - Box2D 灯光在 scene2d Actor 绘制之间渲染

algorithm - 在CIEXYZ到CIELUV的转换中, `u'`, `v'`, `u' ₙ`, ` v' ₙ`, and ` Yₙ`是什么?

java - 在 Android 中使用适配器向 GridView 添加更多元素

java - DateTimeFormatter 的覆盖区域在解析时如何工作?

java http get "request reject"但在浏览器中工作

javascript - 在 pixi.js 中渲染来自 box2dweb 的旋转矩形

javascript - 计算结果向量弹跳圆/球

JavaScript - 分离轴定理 - 碰撞有效,但不响应?