2016-10-03 1 views
0

Box2D로 처음으로 게임하고 있습니다. 필자는 땅을 나타내는 정적 인 몸체와 이전의 정적 인 땅에 떨어지는 작고 역동적 인 상자로 구성된 간단한 테스트 응용 프로그램을 만들었습니다. 그런 다음 힘을 실험하고 상자에 상향 력이 가해 지도록 키를 할당하기로 결정했습니다. 예상대로 작동하지만 일부 순간에 상자가 완전히 멈추기 전에 강제로 트리거해야합니다. 이 행동이 예상됩니까? 이 상향 력 적용 코드영향받는 몸체가 잠시 동안 효과가 없으면 ApplyForce가 효과가 없습니다

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; 

:

FWIW 여기 동적 상자 본체 형상 고정구를 정의하는 방법이다

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는 대부분의 물리 엔진과 마찬가지로 잠시 움직이지 않으면 "잠자기 상태로 만듭니다". 이렇게하면 계산이 절약됩니다. 객체를 계속 움직이게하려면 객체를 깨울 필요가 있습니다. ApplyForce

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

세 번째 매개 변수

는이 물체를 위로 깨워 허용 여부를 Box2D의를 알려줍니다. Box2D에게 객체를 깨우지 말라고하셨습니다. 이 매개 변수를 true로 변경하십시오.

관련 문제