0
我试图实现一个简单的门,当玩家靠近时就会消失。问题在于,即使从世界移除后,门仍然阻止玩家。从子弹物理世界移除后刚体仍然发生碰撞
在每一个帧中,我执行以下操作:
蜱模拟
迭代通过所有的碰撞
如果放置在播放器和一个传感器对象之间的碰撞靠近门,用这种方法取出门:
self.dynamicsWorld->removeCollisionObject(object.collisionBody);
奇怪的是,这对我的场景中的抛射物非常适用,一旦它们与任何其他物体接触就会被移除。
这里的世界是如何设置的:
btDefaultCollisionConfiguration* collisionConfiguration;
btCollisionDispatcher* dispatcher;
btBroadphaseInterface* overlappingPairCache;
btSequentialImpulseConstraintSolver* solver;
btDiscreteDynamicsWorld* dynamicsWorld;
collisionConfiguration = new btDefaultCollisionConfiguration();
dispatcher = new btCollisionDispatcher(collisionConfiguration);
overlappingPairCache = new btDbvtBroadphase();
solver = new btSequentialImpulseConstraintSolver;
dynamicsWorld = new btDiscreteDynamicsWorld(dispatcher, overlappingPairCache, solver, collisionConfiguration);
dynamicsWorld->setGravity(btVector3(0, 0, gravity));
而这里的门是如何设置的:
float mass = 0;
bool isDynamic = false;
btBoxShape* shape = new btBoxShape(size);
btTransform transform;
transform.setIdentity();
btVector3 localInertia(0, 0, 0);
if (isDynamic) {
shape->calculateLocalInertia(mass, localInertia);
}else{
mass = 0;
}
btDefaultMotionState* motionState = new btDefaultMotionState(transform);
btRigidBody::btRigidBodyConstructionInfo cInfo(mass, motionState, shape, localInertia);
btRigidBody* body = new btRigidBody(cInfo);
btTransform transform;
body->getMotionState()->getWorldTransform(transform);
transform.setOrigin(position);
body->getMotionState()->setWorldTransform(transform);
self.dynamicsWorld->addRigidBody(body);
我已经尝试过这个对象上禁用停用,并使其AA动态没有质量的对象,但结果是一样的。
那么如何从世界中移除一个静态对象并使其工作?