【问题标题】:When using BeginContact on Contact Listener, my WorldManifold always return 0,0 on all points... Why?在 Contact Listener 上使用 BeginContact 时,我的 WorldManifold 总是在所有点上返回 0,0 ......为什么?
【发布时间】:2012-09-11 01:56:57
【问题描述】:

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

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

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

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

谢谢

【问题讨论】:

  • 确认一下,这个函数是被world里面的物理引擎调用的。对吗?
  • 哼...不!在构造函数上,我设置:world.setContactListener(myContactListenerInstance)... 然后物理引擎在对象碰撞时自动调用 BeginContact。
  • 是的,这听起来很正确。我刚刚注意到您正在与传感器发生碰撞,请参阅我的回答。

标签: java box2d game-engine libgdx


【解决方案1】:

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

如果您需要碰撞点而没有任何碰撞响应,您可以更改传感器状态,以便两个夹具都不是传感器,然后在您的接触侦听器的 BeginContact 和 PreSolve 函数中,您可以执行 contact->SetEnabled(false) 所以不会发生碰撞响应。

【讨论】:

  • 感谢您的回复!实际上,我需要检查碰撞在哪里,以使飞机转向对面并避免例如墙壁。有没有更好的办法?
猜你喜欢
  • 2010-12-15
  • 1970-01-01
  • 2011-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-06
  • 1970-01-01
相关资源
最近更新 更多