Утверждение не удалось: (fixture-> m_body == this) - PullRequest
0 голосов
/ 24 марта 2012

У нас есть два вектора светильников (все из одного тела)

//Create and add fixtures to vector1 and vector2
b2PolygonShape shape1;
shape1.SetAsEdge(from1,to1);
vector1.push_back( body1->CreateFixture(&shape1,0) );

b2PolygonShape shape2;
shape2.SetAsEdge(from2,to2);
vector2.push_back( body2->CreateFixture(&shape2,0) );

Когда происходит событие1, мы уничтожаем первый прибор в векторе 1.

body1->DestroyFixture( vector1[0] ); //destroy first fixture1
vector1.erase( vector1.begin() ); //remove from vector1

В случае события2 мы уничтожаем первый прибор в векторе 2.

body2->DestroyFixture( vector2[0] ); //destroy first fixture2
vector2.erase( vector2.begin() ); //remove from vector2

Проблема: Иногда, когда мы уничтожаем Fixture (...), мы получаем " Утверждение не удалось: (fixture-> m_body == this) "

Я проверил, и я знаю, что у вектора1 может быть какое-то приспособление2, или у вектора2 есть приспособление1. Почему это может быть? Я добавляю fixture1 только в vector1, а fixture2 только в vector2.

1 Ответ

2 голосов
/ 24 марта 2012

Если вы делаете это в функциях обратного вызова коллизий, не делайте этого.Box2D запрещает удалять тела / приспособления во время столкновений.Вместо этого пометьте тело для последующей обработки после столкновения, например, при следующем вызове метода обновления.

...