2010-06-02 66 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