Box2D Гравитация на конкретный объект? - PullRequest
3 голосов
/ 24 октября 2011

Я вижу, что все говорят, что вы добавляете гравитацию так же, как в мире Box2D:

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

Дело в том, что если я хочу гравитацию только на конкретном b2Body, который содержит userData из CCSprite?AFAIK это будет применять гравитацию ко всему в мире, что я не хочу, поэтому кто-то может объяснить мне, как я могу применить эту гравитацию только к конкретному телу b2?

Спасибо!

Edit1: Могу ли я просто сделать эту строку,

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

Вместо мира = новый b2World ... и т.д ... Разве это не будет работать с гравитацией только на этом b2Body?

1 Ответ

4 голосов
/ 27 октября 2011

Просто примените силу / импульс к определенному 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?

...