0

移除刚体的正确方法是什么,我正在这样做来移除它:

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

pDynamicsWorld->getCollisionObjectArray()但是,在我做一个之后,该对象仍然出现pDynamicsWorld->stepSimulation

奇怪的是,这不会在 ARM 上发生,只是在 x86 上发生。

4

2 回答 2

1

实际上,这就是我发现的。在评论中发布代码看起来很糟糕,这就是答案的原因。

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

所以你从碰撞对象中移除身体。

于 2013-05-27T13:46:06.677 回答
0

就像大多数错误一样,这只是一个愚蠢的错误。对那些花时间阅读它的人感到抱歉。

该错误实际上是在一些由 jni 调用 removeRigidBody 的 java 中。

if (body.id > 0) {

id实际上是地址的 int 类型转换,btRigidBody所以当然任何!= 0整数都可以是有效地址。在 x86 上,地址恰好是 < 0,而在另一台设备上恰好是 > 0。

于 2013-05-27T17:01:01.393 回答