Странная ошибка, которую я не могу отследить. Я реализовал класс ContactListener
для обработки столкновений в моей игре для Android. В методе beginContact(Contact arg0)
я вижу, что два тела в arg0
есть и помещаются в стек. Сразу после вызова world.step()
я запускаю свой собственный метод handleCollisions()
, где я выскакиваю из объектов Contact
и выполняю игровую логику. Однако иногда, когда я снимаю Contact
, одно или оба его тела равны нулю.
Contact
входит в стек со своими телами, но выходит с нулевыми телами. Я не знаю, почему это происходит, и что более важно, я не могу найти, когда это происходит. Насколько мне известно, ни один из моего кода в другом месте не удаляет тела, но опять же могут быть побочные эффекты, о которых я не знаю. Это не помогает, что это не всегда происходит. Обычно это происходит, когда происходит несколько столкновений.
У кого-нибудь есть идеи о том, что может убрать тела? Или кто-нибудь знает способ отслеживания тел, чтобы определить, когда они становятся нулевыми?
Ниже приведен код, который может или не может быть полезным:
public class ConcreteContactListener implements ContactListener
{
private Stack<Contact> contacts;
public ConcreteContactListener()
{
contacts = new Stack<Contact>();
}
@Override
public void beginContact(Contact arg0)
{
contacts.push(arg0);
System.out.println("push: " + arg0.m_fixtureA.m_body);
}
public int handleCollisions(ArrayList<Ball> balls, World world, ArrayList<Ball> smears, SoundEffects sfx, Combos combos)
{
int score = 0;
while (!contacts.isEmpty())
{
Contact contact = contacts.pop();
System.out.println("Contact: " + contact.m_fixtureA.m_body);
int a = -1;
int b = -1;
for (int i = 0; i < balls.size(); i++)
{
System.out.println("Ball: " + balls.get(i).getBody());
if (contact.m_fixtureA.m_body.equals(balls.get(i).getBody()))
a = i;
else if (contact.m_fixtureB.m_body.equals(balls.get(i).getBody()))
b = i;
}
...
}
}