移除刚体的正确方法是什么,我这样做是为了将其移除:
void removeRigidBody(btDynamicsWorld* pDynamicsWorld, btRigidBody* rb)
{
pDynamicsWorld->removeRigidBody(rb);
delete rb->getMotionState();
delete rb;
}
但是,在我执行pDynamicsWorld->getCollisionObjectArray()
pDynamicsWorld->stepSimulation
中
奇怪的是,这不会发生在ARM上,只是x86。
答案 0 :(得分: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;
}
所以你从碰撞对象中移除了身体。
答案 1 :(得分:0)
这就像大多数错误只是一个愚蠢的错误。对于那些花时间阅读的人感到抱歉。
错误实际上出现在一些通过jni调用removeRigidBody的java中。
if (body.id > 0) {
id
实际上是btRigidBody
地址的int强制转换,因此任何!= 0
整数当然都可以是有效地址。在x86上,地址碰巧是< 0在另一个设备上碰巧是> 0