在Contact Listener上使用BeginContact时,我的WorldManifold总是在所有点上返回0,0 ...为什么?

时间:2012-09-11 01:56:58

标签: java box2d game-engine libgdx

我正在开发一种平面战斗机游戏,我在计算飞行路径时遇到了一些问题......

当平面传感器与雷达中的某个物体发生碰撞时,他应该转向某个方向以避开它,但我无法做到,因为我找不到确切的碰撞位置。

我正在使用此(仅相关部分):

public void beginContact(Contact contact) 
{
    Fixture f1 = contact.getFixtureA();
    Fixture f2 = contact.getFixtureB();

    int numpoints = contact.getWorldManifold().getNumberOfContactPoints();
    WorldManifold wm = contact.getWorldManifold();
    Vector2 point0 = new Vector2(wm.getPoints()[0].x, wm.getPoints()[0].y);

    // ...

}

var point0总是有值(0,0)和worldManifold.numContactPoints总是= 0.为什么?

它正在碰撞传感器和静止的身体。

与此tut(http://www.iforce2d.net/b2dtut/collision-anatomy)的唯一区别在于我正在使用libgdxtileAtlastileMapRenderer构建世界,以便附加所有静态装置同一个机构。

很抱歉,如果这是一个菜鸟问题,我几天都找不到解决方案。

也发布在这里:http://badlogicgames.com/forum/viewtopic.php?f=11&t=5417#p25961

由于

1 个答案:

答案 0 :(得分:4)

与传感器夹具的碰撞不会引起任何碰撞响应,因此歧管中没有点,因为引擎不需要计算它们。

如果您需要碰撞点而没有任何碰撞响应,您可以更改传感器状态,使两个灯具都不是传感器,然后在您的联系人监听器的BeginContact和PreSolve函数中,您可以联系 - > SetEnabled(false)这样就不会发生碰撞反应。