示例#1
0
    void clean()
    {
        if (!m_dynamicsWorld)
            return;

        for (int i = m_dynamicsWorld->getNumCollisionObjects() - 1; i >= 0; i--)
        {
            btCollisionObject *obj = m_dynamicsWorld->getCollisionObjectArray()[i];
            btRigidBody *body = btRigidBody::upcast(obj);
            if (body && body->getMotionState())
                delete body->getMotionState();
            if (body && body->getCollisionShape())
                delete body->getCollisionShape();

            m_dynamicsWorld->removeCollisionObject(obj);
            delete obj;
        }

        SAFE_DELETE(m_dynamicsWorld);
        SAFE_DELETE(m_solver);
        SAFE_DELETE(m_overlappingPairCache);
        SAFE_DELETE(m_dispatcher);
        SAFE_DELETE(m_collisionConfiguration);
        SAFE_DELETE(m_debugDraw);
    }