Как предотвратить многократное срабатывание контакта слушателя? - PullRequest
0 голосов
/ 28 июня 2018

В моей игре я использую много корпусов Box2D, которые содержат более одного прибора. А также я использую 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 голосов
/ 07 июля 2018

Я не знаю, как настроены ваши приборы, но вполне вероятно, что ваша реституция может быть проблемой (бодрость). Попробуйте увеличить / уменьшить его. Это уменьшит вероятность того, что ваши тела так быстро отскочат друг от друга.

0 голосов
/ 28 июня 2018

Я нашел решение для моей проблемы. Я добавил одну переменную, которая содержит состояние столкновения. Код:

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

...
...