【问题标题】:How to make billiards in Box2D and prevent balls from getting stuck on the walls?如何在Box2D中制作台球并防止球卡在墙上?
【发布时间】:2017-12-07 16:06:57
【问题描述】:

作为一个快速概述:我正在尝试使用 Box2D 作为基础制作一个台球游戏。现在我的问题:

我应该如何设置台球和边缘,以便它们正常工作?这些球有时似乎无缘无故地粘在边缘。我有四个静态墙对象,在桌子边缘周围恢复为 1。

每个球都有以下属性:

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

母球的密度为101.356358(kg/m^2)

当对 1.2 kg-m/s 的球杆施加脉冲时,球似乎以正常的池球速度移动,并且大部分正确地从墙壁反弹。然而,有时当一个球撞到墙上时,它根本不会反弹,它只是停下来,或者只是继续沿着墙壁移动。这看起来很奇怪,而且似乎不正确。有没有更好的设置方法?

【问题讨论】:

标签: 2d physics box2d


【解决方案1】:

Box2D 最适合使用 0.1 到 10 之间的长度单位(如果您愿意,可以使用米),您越是超出此范围,就越容易出现数值不准确的情况。

尝试放大您的系统,使球的半径为 1.0,并相应地缩放其余部分。您可以保持材料属性不变,但需要放大脉冲。

卡住也可能是由于身体在速度低于某个阈值时进入睡眠状态。您可以通过在 b2BodyDef 结构中将 allowSleep 设置为 false 来防止这种情况。但请注意,从不进入睡眠状态的主体会比正常睡眠的主体消耗更多的 CPU 时间,因此应谨慎使用。

【讨论】:

  • 嗯,他们肯定没有睡着,因为他们仍然沿着墙边移动。
  • 是的,我指的是那些停止的。 ;) 在我重新调整坐标之前,我有过早入睡的问题。然后它似乎消失了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-30
  • 1970-01-01
  • 2022-09-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多