Как правильно удалить твердое тело, я делаю только это, чтобы удалить его:
void removeRigidBody(btDynamicsWorld* pDynamicsWorld, btRigidBody* rb)
{
pDynamicsWorld->removeRigidBody(rb);
delete rb->getMotionState();
delete rb;
}
Тем не менее, объект все еще появляется в pDynamicsWorld->getCollisionObjectArray()
после того как я сделаю pDynamicsWorld->stepSimulation
Как ни странно, этого не происходит на ARM, только на x86.
На самом деле, это то, что я нашел. Размещение кода в комментариях выглядело бы ужасно, поэтому вместо ответа.
//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;
}
Таким образом, вы удалите тело из объектов столкновения.
Это было, как и большинство ошибок, просто глупая ошибка. Извините тем, кто нашел время, чтобы прочитать это.
Ошибка была на самом деле в некотором Java, который вызвал removeRigidBody от jni.
if (body.id > 0) {
id
на самом деле актерский состав из btRigidBody
адрес, так что конечно любой != 0
целое число может быть действительным адресом. На x86 адреса оказались < 0, которое на другом устройстве оказалось> 0.