【问题标题】:JBox2D - Find collision coordinatesJBox2D - 查找碰撞坐标
【发布时间】:2015-11-03 01:13:16
【问题描述】:

我正在使用 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){}

}

【问题讨论】:

    标签: java box2d physics collision jbox2d


    【解决方案1】:

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

    (图片来自this manual

    正如上面的手册所说:

    Box2D 具有计算重叠形状的接触点的功能。 [...] 这些点 [...] 将它们组合成一个流形结构。 [...]

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

    您可以在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++ 的(我使用他们的答案来回答您)。

    【讨论】:

      猜你喜欢
      • 2013-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-21
      相关资源
      最近更新 更多