我想限制身體可以行駛的最高速度。其實限制Box2D的最高速度
的問題是,即使我這樣做this answer提示:
/* after applying forces from input for example */
b2Vec2 vel = body->GetLinearVelocity();
float speed = vel.Normalize();//normalizes vector and returns length
if (speed > maxSpeed)
body->SetLinearVelocity(maxSpeed * vel);
如果,例如,右夾緊速度之前,我申請什麼是一些巨大的力量的身體? 即使線性速度的上限爲maxSpeed,在下一個時間步中,Box2D會將b2Body :: m_force值考慮在內,並有效地將我的身體比maxSpeed更快地移動。
所以我想出了這個(不得不b2Body :: m_force移動到公共):
if (speed > maxSpeed) {
body->SetLinearVelocity(maxSpeed * vel);
body->m_force = b2Vec2(0, 0)
}
然而,這仍然無法妥善處理的問題。
如果速度是稍微小於小於maxSpeed,所以條件不會被擊中,但仍然m_force值會大到足以增加速度太多?
重點是我無法做出準確的預測,因爲我正在使用delta accumulator進行步進時力會如何影響速度,我不知道當前需要多少物理步驟。
除了在Box2D源代碼中集成位置之前直接限制速度,有什麼辦法可以解決這個問題嗎?
爲什麼不簡單總結施加的力量,而是每一步,只適用於您的首選最大值(並通過max降低applied_force)。 – Wilbert
爲什麼不在時間步之後進行夾緊? – iforce2d