2010-06-02 32 views
5

作爲一個快速概述:我試圖使用Box2D作爲遊戲池作爲基礎。現在我的問題:如何在Box2D中製作檯球並防止球卡在牆上?

我應該如何設置檯球和邊緣,以便他們正常工作?這些球有時似乎沒有明顯的原因堅持到邊緣。我有四個靜態牆對象,在桌子邊緣周圍恢復1。

每個球具有以下屬性:

friction: 0.3 
restitution: 0.3 
density: 58.474822 (kg/m^2) 
radius: 0.028575 (m) 

和母球具有101.356358一個密度(kg /平方公尺)

當施加刺激使在1.2kg-m的線索/ s,球似乎以正常的球速移動,並且大部分正確地從牆上反彈。但是,有時當球撞到牆壁時,它根本不會彈起,只是停下來,或者只是繼續沿着牆壁行進。這看起來很奇怪,看起來不正確。有沒有更好的方法來設置它?

+1

我對Box2D並不熟悉,但聽起來好像你已經發現了一個bug。 – Beta 2010-06-03 21:10:48

+0

[我怎樣才能防止球粘在Box2D的牆上?](https://stackoverflow.com/questions/5381399/how-can-i-prevent-a-ball-from-sticking-to- walls-in-box2d) – 2017-12-07 08:06:29

+0

請注意,這個問題在一年前被問及它應該重複的問題。 – 2017-12-10 01:04:53

回答

6

Box2D被設計爲在長度單位在0.1到10之間(如果你願意的話)的長度單位是最好的,而且越是超出這個範圍,就越容易產生數值不準確。

嘗試按比例放大您的系統,以便球具有半徑1.0並相應地縮放其餘部分。您可以保持材料屬性的原樣,但衝動需要放大。

當身體的速度低於某個閾值時,身體進入睡眠狀態也可能導致粘連。您可以通過在b2BodyDef結構中將allowSleep設置爲false來防止此問題。但請注意,永不入睡的身體會比體內的身體消耗更多的CPU時間,因此應謹慎使用。

+0

嗯,他們絕對不會睡着,因爲他們仍然沿着牆壁移動。 – 2010-06-29 19:24:13

+0

是的,我的意思是停止的那些。 ;)在我重新調整座標之前,我有早睡的問題。然後它似乎消失了。 – 2010-06-29 20:17:57

+0

現在看起來好多了! – 2010-06-30 14:30:48