2013-03-09 55 views
13

我有一個質量爲10的物體,並且每個程序循環使用簡單的方法向其施加100的力;Box2D體速帽?

Vector2 force = new Vector2(0, 1) * 100; 
bod.ApplyForce(force, bod.GetWorldCenter()); 

它的偉大工程,加快和所有的,但一旦它到達10的速度(十分之百我假設),它不會去任何更快。我不是一個物理學家,但我記得,身體應該不斷地加速,就像在重力下一樣。這個速度限制是Box2D做事情的結果嗎,還是我大肆搞砸?另外,我該如何解決它。

注:我得到同樣的速度有限,如果我使用的,而不是ApplyForce

ApplyLinearImpulse

更新:我深知由Box2D的(在b2Settings.h)施加於整體最大速度極限。在我的例子中,有問題的項目正在遠遠低於這個極限,因爲改變了應用的力量,1000或10000總是會達到(力/質量)的最大速度。

+0

這不是一個正確的答案,但也許你應該使用較小的總體規模。就像這樣,你可以使用較小的力量,然後不會被某些力量限制卡住。當你的工作規模過大時,Box2d經常不喜歡。 – phemios 2013-03-09 18:07:48

+0

規模很好。一個物體質量爲10kg,我正在施加100N的力量。封頂速度達到10米/秒,這是Box2D的比例範圍。 – 2013-03-10 01:55:55

+1

你檢查過線性衰減了嗎? – Davos555 2013-03-14 11:47:44

回答

3

您正在達到物體的最大允許速度。有兩種方法可以解決這個問題:

  1. 調整Box2D設置中的最大允許速度;打開設置並將MaxTranslation float/const更改爲更高的值,我假設它的默認值爲2.0

  2. 縮小對象大小,執行必要的計算,將對象縮小。這是做它的技術上是正確的方法,因爲Box2D的對MaxTranslation附註註釋:

身體的最大線速度。此限制非常大,用於防止數字問題。你不需要調整它。

因此,請嘗試#1,如果確實有效,那麼這意味着您可能需要縮放。希望有所幫助。

+0

這個答案不斷彈出,它是錯誤的。請仔細閱讀整個問題,特別是提及的'更新'部分 – 2013-03-19 19:10:04

+0

您確定您正在碰撞速度爲10米/秒的**速度?或者你是否實際上按時間步距10米? Box2D報告每個時間步長的距離,所以如果你假設60Hz,一個覆蓋MaxTranslation默認值爲2的給定物體。每個時間步0單位實際上以120米/秒的速度移動。 我不是故意粗魯,但我認爲你可能會混淆兩者。 – 2013-03-19 19:24:18

+0

是的,我很積極。我非常清楚你在描述什麼。如果我達到了極限,那麼當我描述時(更大的力量),我將無法加強它。 – 2013-03-19 19:28:43