2014-03-24 24 views
0

因此,我嘗試通過使用子彈物理來正確地將物理應用到遊戲中的問題很多。我已經嘗試過運動機構來取得成功。我現在正在努力嘗試使用剛剛成功的剛體。下面粘貼的是玩家矩陣和剛體位置的更新代碼。我的問題是我如何正確更新玩家的位置。使用子彈物理對玩家應用物理

更新玩家的剛體和相機的矩陣*的gCamera.matrix僅僅是投影和視圖矩陣的multiplyed一起

physics.PlayerBody->getMotionState()->getWorldTransform(k); 
k.getOpenGLMatrix(glm::value_ptr(gCamera.matrix)); 

btVector3 j; 
j = physics.PlayerBody->getLinearVelocity(); 

gCamera.position.x = j.getX(); 
gCamera.position.y = j.getY(); 
gCamera.position.z = j.getZ(); 


btVector3 pastPos; 
pastPos.setX(gCamera.position.x); 
pastPos.setY(gCamera.position.y); 
pastPos.setZ(gCamera.position.z); 

gCamera.GetInput(window); 


float lVelocityX = sin(gCamera.horizontalAngle * 3.14159265359/180) * 2; 
float lVelocityY = physics.PlayerBody->getLinearVelocity().y(); 
float lVelocityZ = cos(gCamera.verticalAngle * 3.14159265359/180) * 2; 
//physics.PlayerBody->setLinearVelocity(btVector3(lVelocityX, lVelocityY, lVelocityZ)); 
physics.PlayerBody->setLinearVelocity(btVector3(gCamera.position.x, gCamera.position.y, gCamera.position.z)); 

btTransform t; 
t.setFromOpenGLMatrix(glm::value_ptr(gCamera.matrix)); 
physics.PlayerBody->getMotionState()->setWorldTransform(t); 
physics.PlayerBody->setCenterOfMassTransform(t); 
+2

很難回答一個問題,其中包含一堆代碼以及說明「有問題」的描述。 – paddy

回答

1

如果你想在哪裏播放器,然後用運動控制。我知道你遇到了麻煩,但這只是最好的解決方案。

如果你想讓物理移動玩家,你需要一個剛體並施加力量來移動它。

以可靠的方式自己移動剛體是不可能的。在過去我不得不傳送物體的地方,我已經移除並添加了一個新的剛體,但是你不希望爲你的球員做到這一點。