3

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

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

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

谢谢!

Edit1: 我可以只做这条线吗?

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

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

4

1 回答 1

4

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

// 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 身体上施加恒定的力?

于 2011-10-26T20:17:42.720 回答