我ContactListener
与我的世界联系在一起。我有一个扩展Sprite
的Enemy类和扩展Sprite
的Player类。当它们发生碰撞时,我会被发送到beginContact
,但接下来发生的事情就是敌人开始向后拖动我的玩家,我不希望这样。我希望在碰撞时被发送到beginContact
但是它们不会影响彼此的路径。
答案 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。对于传感器,信息可通过互联网广泛获得。