在說明書中說我應該使用小單位(0.1-10米)。不鼓勵使用像素作爲度量單位。但是爲什麼Box2D能夠更好地工作,並且比我使用小型設備時更好的模擬?爲什麼我不應該使用像素作爲Box2D的單位?
回答
可能是因爲像素數量在設備/顯示器之間可能會發生變化,所以它不可靠。例如,如果您在iPad1上移動10個像素,則由於iPad3上的分辨率更高(每英寸更多像素),您將移動的距離比移動iPad3上的10個像素更遠。使用儀表爲物理引擎提供了一個可靠的測量單位,可以在所有設備/顯示屏上保持一致。
Box2D是一個內部使用MKS system of units的仿真框架。如果你想要一個可靠和可預測的模擬,你應該在這個單位系統內用合理的數值表示你創建的模擬系統。你想要一個盒子表現得像一個盒子,一塊岩石表現得像一塊岩石,一個球表現得像一個球。
如果您將像素作爲一個單位,並且您有一個20乘20像素,標量質量值爲10的框,那麼您確實會創建一個邊長20米的框,其質量僅爲10千克。從本質上講,你的模擬變得難以建立並且變得真實。
沒有什麼能夠阻止你使用像素作爲單位。但是,爲了表現可靠,自然和可預測的行爲,以預期的單位和合理的範圍表示提供給模擬框架的值會更好也更容易。
從here
Box2D的物理對象兩者與長度和寬度米來定義。 Box2D針對尺寸爲1x1米的物體進行了調整。您希望PTM (像素到米)的原因是您不希望在像素尺寸和米尺寸之間具有1至1 相關性。例如,如果您有一輛長200個像素和50個像素的汽車,並且您沒有使用PTM轉換,那麼您最終會創建一個長200米乘50米的 Box2D汽車。這是656英尺長或大約 12輛半卡車的長度。想象一下,你將不得不 適用於這輛車來移動它。
您想要的是將您的像素尺寸縮小爲Box2D的米尺寸 ,大多數時候我最終使用30或32像素的PTM到1 米。
我相信Box2D最適合1米的原因是對數字1的計算比對其他數字的運算要快。例如根(1)= 1(並且根是物理引擎中的常見計算)。因此,您應該調整PTM比率,以便最常見的物體尺寸爲1X1米。
的Box2D documentation 1.7節 還提供了一些啓示:
Box2D的工作與浮點數和公差必須使用 使Box2D的表現良好。這些公差已被調整到能夠以米 - 千克 - 秒(MKS)單位工作 。特別是,Box2D的 已經調整好,可以在0.1到10米之間移動物體。 因此,這意味着湯罐和公交車的尺寸之間的物體應該工作 以及。靜態物體可能高達50米大,沒有太多的麻煩。
- 1. 我應該在哪裏使用工作單位?爲什麼?
- 2. 爲什麼我不應該使用Unity?
- 3. 爲什麼我不應該使用atoi()?
- 4. 位圖碰撞vs SVG vs Box2D?我應該使用什麼?
- 5. 爲什麼我的圓圈不會以「像素」單位顯示?
- 6. SEO - 我應該使用什麼元素作爲標題?
- 7. 爲什麼我應該使用1bit位域而不是bools?
- 8. 爲什麼我應該使用XMLLIst而不是簡單的XML?
- 9. 爲什麼不單擊使該元素成爲活動元素?
- 10. 以像素爲單位的元素大小,爲什麼..?
- 11. 爲什麼表單元素不應該被命名爲submit?
- 12. Angular爲什麼不看作品,我應該甚至使用它?
- 13. 爲什麼我應該使用@properties?
- 14. 我應該爲git user.name使用什麼?
- 15. 我應該使用什麼鍵爲HashMap?
- 16. (爲什麼)我應該使用混淆?
- 17. 爲什麼我應該使用org.gradle.api.tasks.Exec?
- 18. 爲什麼我應該使用主ID作爲關聯表
- 19. 爲什麼我應該使用新的位置?
- 20. 爲什麼不使用PT作爲字體和元素大小的單位?
- 21. 爲什麼我不應該使用操作系統提供的菜單圖標?
- 22. 爲什麼我們應該將「Logger」類作爲單例考慮?
- 23. 爲什麼isEqualToString不按我認爲應該的方式工作?
- 24. 爲什麼我不應該使用'float'屬性來定位我的塊?
- 25. 爲什麼你不應該使用svg文件作爲網站?
- 26. 爲什麼不應該使用密碼作爲會話密鑰
- 27. 爲什麼我應該保持流打開,而使用位圖
- 28. 爲什麼我們應該使用Exception作爲超類,爲什麼不使用BaseException
- 29. 我應該爲create_or_update操作使用什麼操作
- 30. 爲什麼或者爲什麼不應該使用Java 7?