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 に答える