我不確定你應該如何控制子彈中的玩家角色。我讀的方法是使用提供的btKinematicCharacterController。我還看到了演示中使用btDynamicCharacterController的方法。但是,在手冊中指出,運動控制器有幾個未解決的問題。這仍然是首選路徑嗎?如果是這樣,是否有任何教程或文件?我發現的所有代碼都是來自演示的代碼片段,以及帶有Ogre的控制器的用法,我不使用它們。你如何控制子彈物理中的玩家角色?
如果這不是應該踩的路徑,那麼有人指向我正確的解決方案。我是新來的子彈,想要一個簡單,簡單的解決方案。我現在所擁有的是一些btKinematicCharacterController。
這是我用來設置控制器代碼:
playerShape = new btCapsuleShape(0.25, 1);
ghostObject= new btPairCachingGhostObject();
ghostObject->setWorldTransform(btTransform(btQuaternion(0,0,0,1),btVector3(0,20,0)));
physics.getWorld()->getPairCache()->setInternalGhostPairCallback(new btGhostPairCallback());
ghostObject->setCollisionShape(playerShape);
ghostObject->setCollisionFlags(btCollisionObject::CF_CHARACTER_OBJECT);
controller = new btKinematicCharacterController(ghostObject,playerShape,0.5);
physics.getWorld()->addCollisionObject(ghostObject,btBroadphaseProxy::CharacterFilter, btBroadphaseProxy::StaticFilter|btBroadphaseProxy::DefaultFilter);
physics.getWorld()->addAction(controller);
這是我用來訪問控制器的位置代碼:
trans = controller->getGhostObject()->getWorldTransform();
camPosition.z = trans.getOrigin().z();
camPosition.y = trans.getOrigin().y()+0.5;
camPosition.x = trans.getOrigin().x();
我控制的方式是通過setWalkDirection ()和jump()(如果canJump()爲true)。
現在的問題是,角色散發一點點,然後通過靜態樓層下降。顯然這不是意圖。這是由於缺乏一個剛體嗎?如何整合這一點?
事實上,現在它只是應該下降,但後來慢慢沉入地板。
我提出這條線是正確創建動態的世界後
physics.getWorld()->getPairCache()->setInternalGhostPairCallback(new btGhostPairCallback());
它現在是這樣的:
broadphase->getOverlappingPairCache()->setInternalGhostPairCallback(new btGhostPairCallback());
我也使用從攪拌機進口.bullet文件,如果這是相關的。
問題出現在bullet文件中,該文件已經被修復(碰撞盒不能正常工作)。然而,我仍然經歷着緊張情緒,偶爾無法加強,立即從高處跳下等問題。