44. 충돌 처리 4 - 사각형 충돌체 (Box Collider)
*** 공부 방법 ***
1. 코딩을 해야 하는 부분은 첫 부분에 변수나 함수, 메소드에 대한 선언이 코드블럭으로 표시되어 있다. //ex) MakeFunction(); 2. 코드블럭 하단에는 해당 선언에 대한 구현 로직이 작성되어 있다. 처
hyrule.tistory.com
[ 사전 지식 ]
< HBRUSH >
- 색을 넣어서 그리고 싶을 때 사용한다.
< CreateSolidBrush(RGB(r, g, b)) >
- HBRUSH 변수에 넣어 사용한다. RGB 색깔에 해당하는 HBRUSH를 생성해준다.
< DeleteObject() >
- 사용한 HBRUSH는 소멸자에서 제거해 주어아 햔다.
< FrameRect(hDC, &Rectangle, Hbrush) >
- HDC, RECT구조체, HBRUSH를 인자로 받아서 HBRUSH의 색깔로 속이 투명한 사각형을 그려낸다.
class CColliderBox
< PostUpdate() >
- 이제 설계한 충돌체 클래스들을 바탕으로 실제 충돌처리를 해 주어야 한다.
- 일단 설정한 사이즈만큼의 사각형을 offset만큼 떨어뜨려서 생성한다.
- 이런 식으로 만들어줘야 한다.
- 이 충돌처리 과정을 CGamoObject의 이동 처리과정(Update())이 다 끝난 후인 PostUpdate() 과정에서 해 준다.
- 주인 오브젝트의 위치 받아옴 -> 받아온 위치에 오프셋값과 너비, 높이를 더해 사각형의 Left Top과 Right Bottom을 계산하고, 이 값을 m_Info 값에 저장해놓는다.
< Render() >
- 충돌체는 실제 게임에서는 렌더링해줄 필요가 없다.
- ifdef를 사용해서 디버그 모드로 컴파일할때만 출력되도록 출력한다.
- 충돌되지 않았을 때는 초록색 테두리, 충돌되었을때는 빨간색 테두리로 출력해서 충돌 여부를 시각적으로 파악할 수 있게 해 주어야 하므로 다음의 과정을 해 주어야 한다.
flag.h
< enum class EBrushType >
- 열거체로 색깔 파레트를 만들어 준다.
- Black, Red, Green, Blue, Yellow 그리고 배열 선언을 위해 Max 정도로 정의해주면 될 듯.
class CGameManager
< HBRUSH m_Brush[] >
- 위에서 만들어둔 팔레트의 갯수 만큼 배열로 선언한다.
< Init() >
- 초기화 단계에서 EBrushType에 맞게 색깔을 생성하여 저장해 준다.
< HBRUSH GetBrush() >
- 생성된 HBRUSH를 받아올 수 있는 메소드
- 이제 HBRUSH를 통해 충돌체에 색깔을 표시할 수 있게 되었다.
class CColliderBox
< Render() >
- 아래 로직은 디버그 모드일 때만 작동하도록 해준다.
- 우선 기본적으로 초록색 HBRUSH를 받아온다.
- 만약 m_CollisionList가 비어있지 않다면, 어떤 물체던간에 충돌을 하고 있다는 뜻이므로 HBRUSH를 빨간색으로 바꿔준다.
- RECT 구조체를 선언하고, 충돌체의 사이즈 정보가 담겨있는 m_Info와 CCamera의 위치를 통해 실제 그려질 곳을 계산하고, 구조체에 값을 입력한다.
- FrameRect() 메소드를 통해 설정한 색깔로 사각형을 그려낸다.