2014년 2월 27일 목요일

[일기]Box2D. Jump.

점프를 구현하는 것.

 관심이 있는 주제는 아니었다. 그냥 이런식으로 처리한다는 것을 알았다는 것 정도?

 간단하고 개념은 이전의 선속도 지정이나, 각속도 지정과 같기 때문에 방법만 설명한다.

 1. 점프방향으로의 속도 지정.

 b2Vec2 velocity = pBody->GetLinearVelocity();
 velocity.y = 10;
 pBody->SetLinearVelocity( velocity );

 2. 점프 방향으로 힘 가하기.

 int remainingJumpSteps;  //이 횟수만큼 시연(스텝) 단계에서 지속적으로 힘을 가함.

 remainingJumpSteps = 0;

 //점프 키를 누르면
 //in Step method
 remainingJumpSteps = 10;
 if( remainingJumpSteps > 0 ) {
     pBody->ApplyForce( b2Vec2(0, 500), pBody->GetWorldCenter(), true );
     remainingJumpSteps--;
 }

2-2. 순차적 힘 가하기

 if ( remainingJumpSteps > 0 ) {
    //속도를 10으로 만들고자 한다.
    float force = pBody->GetMass() * 10 / (1/60.0); //f = m v/t
    //이와 같은 힘을 10으로 나눈다. //적용되는 횟수가 10이다. -> remainingSteps;
    force /= 10.0;
    pBody->ApplyForce( b2Vec2(0,force), pBody->GetWorldCenter(), true );
    remainingJumpSteps--;
  }

3. 충격량 가하기.

  float impulse = pBody->GetMass() * 10;
  pBody->ApplyLinearImpulse( b2Vec2(0,impulse), pBody->GetWorldCenter() );


 4. 다른 방법.

   물리적인 실제 현상을 묘사하기 위해, 작용과 반작용 법칙을 적용하기.
   실제 땅을 밀어서 얻는 반작용으로 점프를 하는 것은, 지면 위에 서 있는 것을 판단할 수 있는 척도가 된다. 줄로 이루어진 다리에서 점프를 할 경우, 줄도 밑으로 출렁거리게 된다.

 접합체를 이용하여 이를 밑으로 밀고 접합체가 지면으로부터 받은 반작용을 이용해 강체를 직접 띄우는 방법도 고려가능하다.

 5. 강체를 회전하지 못하게 설정하기.

 pBody->SetFixedRotation(true);

댓글 없음:

댓글 쓰기