如何防止多次触发接触监听器?

How to prevent multiply triggering contact listener?

在我的游戏中,我使用了很多包含多个固定装置的 Box2D 物体。 而且我还使用 Contact Listener 来检测不同物体之间的碰撞。 不幸的是,我遇到了一个可怕的问题。当物体发生碰撞时,Contact Listener 会多次检测到它。如何去除 Contact Listener 的抖动? 我的日志:

...
postSolve A: brows B: bShape
endContact A: brows B: bShape
endContact A: brows B: bShape
endContact A: brows B: bShape
endContact A: brows B: bShape
endContact A: brows B: bShape
endContact A: brows B: bShape

在我为 body 的每个灯具分配唯一的用户数据之后。

新日志:

...
endContact A: f-3 B: f-0
endContact A: f-4 B: f-0
endContact A: f-5 B: f-0
endContact A: f-7 B: f-0

我找到了解决问题的办法。我添加了一个变量,其中包含碰撞状态。 代码:

public class CollisionController implements ContactListener {

private boolean collided;

...


@Override
public void beginContact(Contact contact) {
    collided = false;
}

@Override
public void endContact(Contact contact) {
    if (!collided && contact.getFixtureA().getUserData() != null && contact.getFixtureB().getUserData() != null) {
        // CODE
        collided = true;
    }
}

...

我不知道你的固定装置是如何设置的,但很可能你的恢复原状可能是问题所在(弹性)。尝试增加/减少它。这将减少您的身体如此快速地轻微弹跳的可能性。