如何在Box2D中制作台球游戏并防止球卡在墙上?

5
作为一个快速概述:我正在尝试使用Box2D作为基础制作一个台球游戏。现在我的问题是:如何设置台球和边缘,使它们正常运作?有时候球似乎无缘无故地卡在边缘上。我在桌子的四个边缘处放置了具有1的恢复力的四个静态墙体对象。每个球都具有以下属性:
friction: 0.3
restitution: 0.3
density: 58.474822 (kg/m^2)
radius: 0.028575 (m)

当对球杆施加1.2千克-米/秒的冲量时,球似乎以正常的台球速度移动,并且大部分情况下正确地弹射出墙壁。 但是,有时候当球碰到墙壁时,它不会弹开,而只是停止或沿着墙壁继续行驶。这看起来很奇怪,似乎不正确。是否有更好的设置方法?

同时提一下,球杆的密度为101.356358(kg/m^2)。


1
我不熟悉Box2D,但听起来你已经发现了它的一个bug。 - Beta
可能是如何在Box2D中防止球粘在墙上?的重复问题。 - Ciro Santilli OurBigBook.com
请注意,这个问题是在它所谓的重复问题之前一年提出的。 - Ed Marty
1个回答

6

Box2D旨在最适合使用0.1到10之间的长度单位(如果您愿意,可以是米),而且您越是超出此范围,它就越容易受到数值不准确性的影响。

尝试扩大您的系统,使球的半径为1.0,并相应地缩放其他内容。您可以保持材料属性不变,但需要将冲量进行升级。

粘连也可能是由于物体速度低于某个阈值时进入睡眠状态所致。您可以通过在b2BodyDef结构中将allowSleep设置为false来防止这种情况发生。但请注意,从未进入睡眠状态的物体比那些进入睡眠状态的物体消耗更多的CPU时间,因此这应该谨慎使用。


他们肯定没有睡着,因为他们仍然沿着墙边移动。 - Ed Marty
是的,我指的是那些停止的。;) 我自己也曾遇到过提前休眠的问题,直到我重新调整了坐标,然后问题似乎就解决了。 - Staffan E

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接