*** 공부 방법 ***
1. 코딩을 해야 하는 부분은 첫 부분에 변수나 함수, 메소드에 대한 선언이 코드블럭으로 표시되어 있다. //ex) MakeFunction(); 2. 코드블럭 하단에는 해당 선언에 대한 구현 로직이 작성되어 있다. 처
hyrule.tistory.com
GameInfo.h
- GRAVITY = 9.8f 로 정의해놓자.
class CGameObject;
protected://물리 처리
bool m_PhysicsSimulate;
bool m_Ground;
float m_GravityAccel;
float m_FallTime;
float m_FallStartY;
bool m_Jump;
float m_JumpVelocity;
public:
void SetPhysicsSimulate(bool Physics);
void SetGravityAccel(float Accel);
void SetJumpVelocity(float JumpVelocity);
void Jump();
{ bool m_PhysicsSimulate }
- 일단 물리 시뮬레이션을 할것인지 말것인지를 설정해주어야 한다. 물리 효과를 굳이 줄 필요가 없는 오브젝트도 많기 때문이다. 기본값 false
{ bool m_Ground }
- 현재 땅에 닿아 있는지 아닌지를 판별하기 위한 변수. 기본값 true
{ float m_GravityAccel }
- 중력 가속도.
{ float m_FallTime }
- 자유낙하를 시작했을 때 얼마나 떨어지고 있는지. 기본값 0.f
{ float m_FallStartY }
- 떨어지기 시작한 Y지점이 어디인지. 기본값
{ bool m_Jump }
- 점프했는지 여부를 확인하기 위한 변수. 기본값 false
{ float m_JumpVelocity }
- 점프 속도. 기본값 0.f
< Update() >
- 낙하를 시작했을 때 게임오브젝트의 위치를 구하는 방법은 이렇다.
- 낙하 시작 지점을 기억해 두고, 중력 법칙에 따라 일정 시간이 지난 후의 이동 거리를 구한다.
- 이 거리를 낙하 시작 지점에서 빼주면 위치를 구할 수 있다.
// 물리 시뮬레이션 적용을 할때 땅에 서있지 않으면
if (!m_Ground && m_PhysicsSimulate)
{
// 떨어지는 시간을 누적시켜준다.(중력가속도)
m_FallTime += DeltaTime * m_GravityAccel;
//속도 변수를 생성하고
float Velocity = 0.f;
//점프 중이면 낙하시간에 점프속도만큼의 가속도를 추가한다.
if (m_Jump)
Velocity = m_JumpVelocity * m_FallTime;
//최종적으로 위치를 구해준다.
m_Pos.y = m_FallStartY - (Velocity - 0.5f * GRAVITY * m_FallTime * m_FallTime);
}
이론 참고: http://www.cyberschool.co.kr/html/text/gtgh/gtphy/1/dgasok.htm
1-5. 등가속도운동 - 공통물리 - 사이버스쿨
건물의 높이 = 평균속도 x 걸린 시간. 평균속도는 29.4/2 = 14.7 , 걸린 시간은 3 초이므로 건물 높이 = 14.7 x 3 = 44.1 m 그런데, 3층에서 떨어뜨리면 가속도가 9.8 m/s²이기 때
www.cyberschool.co.kr
m_FallTime += DeltaTime * m_GravityAccel;
- DeltaTime * 중력 가속도만큼 곱해서 떨어진 시간을 누적시켜 준다.
- if (m_Jump)
Velocity = m_JumpVelocity * m_FallTime;
-> 만약 점프한 상태라면, 낙하 방향의 반대쪽으로 가속도를 가진다.
- m_Pos.y = m_FallStartY - (Velocity - 0.5f * GRAVITY * m_FallTime * m_FallTime);
낙하 시작 지점으로부터 일정 시간동안 낙하했을 때의 거리를 빼서 위치를 구한다. WIN32API에서의 y좌표계는 반대 방향이므로, 낙하를 사면 사실 좌표값이 더 커지는 것임을 감안해야 된다.
-- 점프 속도는 1차 방정식인 반면, 중력 낙하 거리는 2차 방정식이다. 처음에는 점프 속도가 중력 낙하 거리보다 커서 위쪽으로 이동하지만, 곧 역전되어 도로 떨어지게 된다.
'WIN32API FrameWork > 한단계씩 직접 구현' 카테고리의 다른 글
67. 화면의 확대 (0) | 2022.06.10 |
---|---|
66. 오브젝트 컬링 (0) | 2022.06.09 |
64. 텍스트 출력 (0) | 2022.06.09 |
멤버함수와 전역함수의 이름이 겹칠 때 (0) | 2022.06.09 |
63. 위젯 컴포넌트 (0) | 2022.06.09 |