2013-05-27 40 views
0

什么是正确的方法,以消除刚体,我做的只是这将其删除:删除刚体,但仍然得到碰撞它

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

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

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

+0

可能是一个错误,你有没有在官方论坛上问过这个问题? – zeller

+0

@zeller我没有,所以这是正确的方法,据你所知? – weston

+0

@zeller我问过现在:http://bulletphysics.org/Bullet/phpBB3/viewtopic.php?f=9&t=9129谢谢 – weston

回答

0

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

该错误实际上是在某些java中,通过jni调用removeRigidBody。

if (body.id > 0) { 

id实际上是btRigidBody地址的一个int投,所以当然任何!= 0整数可能是一个有效的地址。在x86上,地址碰巧是< 0,而在其他设备上碰巧> 0。

+1

所以它确实是一个错误。只是没有子弹,但在你的代码:) – zeller

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

因此,您从碰撞对象中删除身体。

+0

谢谢,我给它一个镜头,但'removeRigidBody'无论如何都调用removeCollisionObject(在'btDiscreteDynamicsWorld'中),所以它没有任何区别。 – weston

+0

我在本地的gamedev论坛上问过使用bullet v281的人,他说这显然不是正常行为。尽管我尽可能提供帮助,但我希望你能在子弹论坛上得到你的答案。 – zeller

+0

感谢您的努力,这是一个愚蠢的错误,请参阅我的答案了解详情。 – weston

相关问题