2016-10-03 1 views
0

Я играю с Box2D в первый раз. Я создал простое тестовое приложение, которое состоит из статического тела, представляющего землю, и маленькую динамическую коробку, которая падает и приземляется на первую. Затем я решил поэкспериментировать с силами, назначив ключ, чтобы заставить к нему применить усилие вверх. Он работает так, как ожидалось, но только в том случае, если я убежу, чтобы вызвать силу до того, как ящик был полностью неподвижен в течение нескольких мгновений. Ожидается ли такое поведение?ApplyForce неэффективен после того, как пострадавшее тело все еще какое-то время

FWIW, вот как определяются тело, форма и крепление динамической коробке:

b2BodyDef body_def; 
body_def.type = b2_dynamicBody; 
body_def.position.Set(position.x, position.y); 
body = world.CreateBody(&body_def); 

b2PolygonShape shape; 
shape.SetAsBox(size.width/2.0f, size.height/2.0f); 

b2FixtureDef fixture_def; 
fixture_def.shape = &shape; 
fixture_def.density = 1.0f; 
fixture_def.friction = 0.3f; 

Это код, который применяет подъемную силу:

b2Body* body = box.b2_body(); 
body->ApplyForce(b2Vec2(0.0f, 15.0f), body->GetPosition(), false); 

И это моделирование шаг вызова:

world.Step(time_step, velocity_iterations, position_iterations); 

где:

  • time_step 1/60
  • velocity_iterations 6; и
  • position_iterations является 2.

Если необходима дополнительная информация, просто дайте мне знать.

спасибо.

ответ

2

Box2D, как и большинство физических движков, будет «помещать объекты в сон», если они не двигаются некоторое время. Это экономит расчеты. Вам нужно просыпаться, если вы хотите продолжить движение.

body->ApplyForce(b2Vec2(0.0f, 15.0f), body->GetPosition(), false); 

Третий параметр ApplyForce говорит Box2D следует ли разрешить будить объект вверх. Вы сказали Box2D, чтобы не разбудить объект. Измените этот параметр на true.

Смежные вопросы