2014-08-31 8 views
0

Я использую PhysX 3.3.0.PhysX - получить скорость контроллера

Мой персонаж является контроллером капсулы, и мне нужно иметь возможность получить фактическую скорость контроллера, что кажется намного сложнее, чем нужно.

Я попытался получить скорость актера, связанного с контроллером, после основной симуляции сцены, однако это просто возвращает фиктивные значения, скорее всего, из-за того, что контроллер является просто кинематическим актером под капотом ,

Теперь единственной альтернативой, о которой я могу думать, было бы следить за скоростью самостоятельно, но это не так просто. Я могу легко отслеживать свои собственные изменения скорости, например. скорость, подаваемая через входы перемещения. Однако это точно, пока контроллер не сталкивается ни с чем. После перемещения контроллера через функцию перемещения скорость контроллера могла быть изменена столкновениями с полом или стеной и т. Д. Функция move возвращает флаги столкновений, но они только говорят мне, было ли какое-то столкновение с боками , нижней или верхней, но это недостаточно точно, чтобы получить новую скорость вручную.

Это кажется довольно большим недосмотром, поэтому, возможно, я просто что-то пропустил. Как я могу точно отслеживать скорость контроллера, если PhysX не предоставляет функцию для этого?

// EDIT

Это, как я захватывая скорость после моделирования сцены:

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

+0

Не так много, чтобы показать, я просто использую 'getLinearVelocity', но я добавил код в любом случае. – Silverlan

+0

Каковы значения, возвращаемые? как вы знаете, что они фиктивные? – LearnCocos2D

ответ

0

Вопрос в том, как вы перемещаете свой контроллер. Если вы используете PxController::move, то вы можете легко определить скорость, разделив фактический вектор перемещения на время кадра обновления.

Фактический вектор смещения - разница в положениях вашей капсулы до и после того, как был вызван PxController::move.

Время обновления кадра (скорее всего) того времени, когда вы предоставляете PxScene::simulate (скорее всего, потому, что у вас может быть более сложный подход для цикла обновления).

 Смежные вопросы

  • Нет связанных вопросов^_^