2014-08-31 48 views
0

我正在使用PhysX 3.3.0。PhysX - 獲取控制器的速度

我的角色是一個膠囊控制器,我需要能夠檢索控制器的實際速度,這看起來很難完成。

我試過在現場主模擬之後檢索與控制器相關聯的actor的速度,但是這只是返回虛假值,很可能是由於控制器僅僅是罩下的運動學演員。

現在,我能想到的唯一方法就是自己跟蹤速度,但事情並非如此簡單。我可以很容易地跟蹤自己對速度的變化,例如通過運動輸入施加的速度。然而,只要控制器不與任何事物相沖突,這只是準確的。通過移動功能移動控制器後,控制器的速度可能會因與地板或牆壁碰撞而改變。移動功能會返回碰撞標誌,但它們只會告訴我是否存在與側面碰撞的地方,底部或頂部,但這不足以手動推導新的速度。

這似乎是一個相當大的疏忽,所以也許我只是在這裏錯過了一些東西。如果PhysX不提供這樣的功能,我該如何精確跟蹤控制器的速度?

//編輯

這是我多麼現場模擬後斂速度:

void ControllerPhysObj::UpdateVelocity() 
{ 
    physx::PxRigidDynamic *actor = m_controller->getActor(); 
    physx::PxVec3 vel = actor->getLinearVelocity(); 
    m_velocity.x = vel.x; 
    m_velocity.y = vel.y; 
    m_velocity.z = vel.z; 
} 

m_controller是PxCapsuleController。

+1

發佈您試圖獲得速度的代碼 – LearnCocos2D 2014-08-31 07:11:00

+0

沒有太多可以顯示的東西,我只是使用'getLinearVelocity',但無論如何我都添加了代碼。 – Silverlan 2014-08-31 07:42:26

+0

返回的值是什麼?你怎麼知道他們是假的? – LearnCocos2D 2014-08-31 08:57:56

回答

0

問題是你如何移動你的控制器。如果您使用PxController::move,則可以通過將實際的位移矢量除以更新幀的時間來輕鬆確定速度。

位移的實際向量是PxController::move被調用之前和之後膠囊位置的差異。

更新幀的時間(很可能)是您提供PxScene::simulate的時間(很可能是因爲您可能有更詳細的更新週期方法)。