如何防止乘法触发联系人监听器?

时间:2018-06-28 18:06:01

标签: java libgdx box2d

在我的游戏中,我使用很多Box2D实体,其中包含多个固定装置。 而且我还使用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

为身体的每个固定装置分配唯一的用户数据之后。

新日志:

...
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

2 个答案:

答案 0 :(得分:1)

我不知道您的固定装置是如何设置的,但是很可能是您归还财产(弹跳)。尝试增加/减少它。这样可以减少您的身体如此迅速弹跳的可能性。

答案 1 :(得分: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;
    }
}

...