WIN32API FrameWork/한단계씩 직접 구현

44. 충돌 처리 4 - 사각형 충돌체 (Box Collider)

hyrule 2022. 5. 30. 14:57

http://hyrule.tistory.com/111 

 

*** 공부 방법 ***

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() 메소드를 통해 설정한 색깔로 사각형을 그려낸다.


GameFrameworkStepbyStep_45_Collision4_BoxCollider.zip
0.30MB