代码之家  ›  专栏  ›  技术社区  ›  Данил Вагапов

如何防止多重触发联系人侦听器?

  •  0
  • Данил Вагапов  · 技术社区  · 6 年前

    在我的游戏中,我使用了很多包含多个固定装置的box2d实体。 同时,我使用接触监听器来检测不同物体之间的碰撞。 不幸的是,我有一个可怕的问题。当身体碰撞时,联系人侦听器会多次检测到它。如何解除与听众的联系? 我的日志:

    ...
    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 回复  |  直到 6 年前
        1
  •  1
  •   TheChubbyPanda    6 年前

    我不知道你们的固定装置是如何设置的,但很可能你们的恢复可能是问题(弹性)。尝试增加/减少它。这将降低你的身体反弹的可能性非常小,分开这么快。

        2
  •  0
  •   Данил Вагапов    6 年前

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

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