没有碰撞的libgdx ContactListener

时间:2017-02-04 10:18:57

标签: java opengl libgdx

ContactListener与我的世界联系在一起。我有一个扩展Sprite的Enemy类和扩展Sprite的Player类。当它们发生碰撞时,我会被发送到beginContact,但接下来发生的事情就是敌人开始向后拖动我的玩家,我不希望这样。我希望在碰撞时被发送到beginContact但是它们不会影响彼此的路径。

1 个答案:

答案 0 :(得分:1)

如果我理解正确,你想要检测到碰撞,并抑制碰撞产生的冲动。那里至少有两个选择:

选项1

使其中一个夹具成为传感器。这样,你仍然会发生碰撞,但没有身体相互排斥。

FixtureDef def = new FixtureDef();
def.isSensor = true;

选项2

这可能更符合您的想法。为避免碰撞物理效应,您可以丢弃这样的联系人:

@Override
public void preSolve(Contact contact, Manifold oldManifold)
{
    contact.setEnabled(false);
}

请注意,只要两个实体发生冲突,您就必须继续调用setEnabled(false)每个box2d世界步骤。

MoreOn

您可以阅读有关碰撞如何在那里工作的更多信息:http://www.iforce2d.net/b2dtut/collision-callbacks。对于传感器,信息可通过互联网广泛获得。