关于 ios:Box2D 对特定对象的重力?

Box2D Gravity to specific object?

我看到每个人都说你在 Box2D 世界中像这样添加重力:

1
2
3
b2Vec2 gravity = b2Vec2(0.0f, -10.0f);
bool doSleep = false;
world = new b2World(gravity, doSleep);

问题是,如果我只想要包含来自 CCSprite 的 userData 的特定 b2Body 上的重力怎么办? AFAIK 这会将重力应用于我不想要的世界上的一切,所以有人可以向我解释如何将这种重力仅应用于特定的 b2Body?

谢谢!

编辑1:
我可以做这行吗,

1
_bottomBody->ApplyForce(gravity, _bottomBody->GetPosition());

而不是世界 = 新的 b2World... 等等... 难道不是只在那个 b2Body 上使用重力吗?


只需在每一帧对特定的 b2Body 施加一个力/脉冲。它将模拟重力。

1
2
3
4
5
6
7
// a procedure called every frame
void Application::on_update_world(double t)
{
  m_body_with_custom_gravity->applyForce(CUSTOM_GRAVITY * m_body_with_custom_gravity->getMass());

  m_phys_world->Step(t, VEL_ITERATIONS, POS_ITERATIONS);
}

一个主题与您的问题密切相关:
如何在 Box2D 主体上施加恒定力?