2014-03-24 26 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

如果你想在哪里播放器,然后用运动控制。我知道你遇到了麻烦,但这只是最好的解决方案。

如果你想让物理移动玩家,你需要一个刚体并施加力量来移动它。

以可靠的方式自己移动刚体是不可能的。在过去我不得不传送物体的地方,我已经移除并添加了一个新的刚体,但是你不希望为你的球员做到这一点。