점프를 구현하는 것.
관심이 있는 주제는 아니었다. 그냥 이런식으로 처리한다는 것을 알았다는 것 정도?
간단하고 개념은 이전의 선속도 지정이나, 각속도 지정과 같기 때문에 방법만 설명한다.
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);
댓글 없음:
댓글 쓰기