2013-08-20 37 views
2

我不確定你應該如何控制子彈中的玩家角色。我讀的方法是使用提供的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文件中,該文件已經被修復(碰撞盒不能正常工作)。然而,我仍然經歷着緊張情緒,偶爾無法加強,立即從高處跳下等問題。

回答

1

我對這個問題的回答在這裏告訴你什麼對我很好,顯然也適用於要求的人。

Avoid ground collision with Bullet

子彈的角色管理的實現是很「基本」很遺憾。 爲了獲得好的角色控制器,你需要投入這麼多。