Libgdx 如何获取传感器夹具接触位置

Libgdx 如何获取传感器夹具接触位置,libgdx,Libgdx,我使用LibGDX,我有一个移动的实体对象(Fixture B)和一个传感器对象(Fixture a) 在我的ContactListener中,我可以检查固体物体和传感器是否发生碰撞,但我无法说出第一个接触点在哪里(我需要知道该点,以便在下一阶段将其用作中心点) 我有以下代码: @Override public void beginContact(Contact contact) { Fixture fa = contact.getFixtureA(); Fixture fb = con

我使用LibGDX,我有一个移动的实体对象(
Fixture B
)和一个传感器对象(
Fixture a

在我的
ContactListener
中,我可以检查固体物体和传感器是否发生碰撞,但我无法说出第一个接触点在哪里(我需要知道该点,以便在下一阶段将其用作中心点)

我有以下代码:

@Override
public void beginContact(Contact contact)
{
  Fixture fa = contact.getFixtureA();
  Fixture fb = contact.getFixtureB();
  LogMessage("World points: "+contact.getWorldManifold().getPoints().length);
  float contactX = contact.getWorldManifold().getPoints()[0].x; //always 0.0
  float contactY = contact.getWorldManifold().getPoints()[0].y; //always 0.0
  LogMessage("Contact X: "+contactX);
  LogMessage("Contact Y: "+contactY);
}
不幸的是,该歧管不包含任何碰撞点,因为其中一个固定装置是传感器。我很确定他们不会错过传感器触点检测这样一项重要任务的实施,我只是还没有找到合适的方法

是否有任何内置方法来检测接触点?

您必须在两个实体的夹具上设置UserData(“region1”)

//Class platform
b2body.createFixture(fdef).setUserData("region1");

//Class Player
b2body.createFixture(fdef).setUserData("foot");
在Contact Listener中,检查联系人是否位于该区域,如下所示:

public void beginContact(Contact contact) {
    Fixture fixA = contact.getFixtureA();
    Fixture fixB = contact.getFixtureB();

    if(fixA.getUserData() == "region1" || fixB.getUserData() == "region1"){
        Fixture foot = fixA.getUserData() == "foot" ? fixA : fixB;
        Fixture object = foot == fixA ? fixB : fixA;
        //
        Gdx.app.log("foot touched","region1");
    }
更新日期:2016年11月5日

明白。你做得对

我做了一个简单的例子来检查:

但是试着检查你的固定装置是否有密度。例如,如果您正在创建EdgeShape,则不会检测到它

您必须在两个实体的fixture上设置UserData(“region1”)

//Class platform
b2body.createFixture(fdef).setUserData("region1");

//Class Player
b2body.createFixture(fdef).setUserData("foot");
在Contact Listener中,检查联系人是否位于该区域,如下所示:

public void beginContact(Contact contact) {
    Fixture fixA = contact.getFixtureA();
    Fixture fixB = contact.getFixtureB();

    if(fixA.getUserData() == "region1" || fixB.getUserData() == "region1"){
        Fixture foot = fixA.getUserData() == "foot" ? fixA : fixB;
        Fixture object = foot == fixA ? fixB : fixA;
        //
        Gdx.app.log("foot touched","region1");
    }
更新日期:2016年11月5日

明白。你做得对

我做了一个简单的例子来检查:


但是试着检查你的固定装置是否有密度。例如,如果您正在创建一个EdgeShape,它将不会被检测到

您误解了我的问题:我需要知道确切的碰撞点,而不是确定对象和传感器是否发生碰撞。我已经知道了。你误解了我的问题:我需要知道确切的碰撞点,而不是确定物体和传感器是否发生碰撞。我已经有了。