Снятие твердого тела, но столкновение с ним

Как правильно удалить твердое тело, я делаю только это, чтобы удалить его:

void removeRigidBody(btDynamicsWorld* pDynamicsWorld, btRigidBody* rb)
{
pDynamicsWorld->removeRigidBody(rb);
delete rb->getMotionState();
delete rb;
}

Тем не менее, объект все еще появляется в pDynamicsWorld->getCollisionObjectArray() после того как я сделаю pDynamicsWorld->stepSimulation

Как ни странно, этого не происходит на ARM, только на x86.

0

Решение

На самом деле, это то, что я нашел. Размещение кода в комментариях выглядело бы ужасно, поэтому вместо ответа.

     //remove the rigidbodies from the dynamics world and delete them
int i;
for (i=m_dynamicsWorld->getNumCollisionObjects()-1; i>=0 ;i--)
{
btCollisionObject* obj = m_dynamicsWorld->getCollisionObjectArray()[i];
m_dynamicsWorld->removeCollisionObject( obj );
delete obj;
}

Таким образом, вы удалите тело из объектов столкновения.

1

Другие решения

Это было, как и большинство ошибок, просто глупая ошибка. Извините тем, кто нашел время, чтобы прочитать это.

Ошибка была на самом деле в некотором Java, который вызвал removeRigidBody от jni.

if (body.id > 0) {

id на самом деле актерский состав из btRigidBody адрес, так что конечно любой != 0 целое число может быть действительным адресом. На x86 адреса оказались < 0, которое на другом устройстве оказалось> 0.

0