【问题标题】:C++ Box2D - Dynamic bodies not affected by gravity if left aloneC ++ Box2D - 如果单独放置不受重力影响的动态物体
【发布时间】:2012-12-09 14:17:08
【问题描述】:

我在 SFML2 中使用 Box2D 并意识到;当我改变世界的重力时,有一段时间没有动过的动态物体不受重力变化的影响。我准备了一个视频来让这个解释更清楚。

有什么解决办法吗?我必须自己做重力吗?为什么会这样?

This is the video. Notice if the bodies don't move for a short while, they aren't affected by the more recently moved ones.

【问题讨论】:

  • +1 好问题正要问它,发现了这个!

标签: c++ c box2d sfml


【解决方案1】:

Box2D 中的对象在休息后进入睡眠状态。更改重力等参数后,您将不得不唤醒沉睡的物体,可能是通过在所有物体上调用WakeUp。当物体与物体发生碰撞时,物体也会自动唤醒,这就是为什么重力似乎在物体与物体碰撞后开始生效的原因。

【讨论】:

  • 我该怎么做?迭代?还是有一个很好的世界命令来唤醒他们?
  • 是的,您可以遍历所有对象并调用WakeUp。您还可以使用noSleep 参数集创建世界。您还可以将allowSleep 设置为 false 来创建对象。
  • 完美!顺便说一下,新版B2D调用方法SetAwake(bool):3
  • 啊,Box2D 05~06 年才问世,其实我没用过。
  • 没问题,你给我指明了正确的方向!
猜你喜欢
  • 2014-09-18
  • 1970-01-01
  • 1970-01-01
  • 2023-01-31
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多