WIN32API FrameWork/한단계씩 직접 구현

43. 충돌 처리 3 - 충돌체 2

hyrule 2022. 5. 30. 00:28

http://hyrule.tistory.com/111 

 

*** 공부 방법 ***

1. 코딩을 해야 하는 부분은 첫 부분에 변수나 함수, 메소드에 대한 선언이 코드블럭으로 표시되어 있다. //ex) MakeFunction(); 2. 코드블럭 하단에는 해당 선언에 대한 구현 로직이 작성되어 있다. 처

hyrule.tistory.com

 


[코드 문제 수정]

GameInfo.h

< struct CollisionProfile >

- 생성자에서 Enable의 기본값을 true로 설정


- 일단 가장 기본이 되는 박스충돌부터 구현한다.

- 박스 충돌이 일어난 상황을 가정해보자. 

-- 이 상황에서는 빨간 사각형의 LeftTop.x가 파란 사각형의 RightBottom.x보다 작고

LeftTop.y가 RightBottom.y보다 크다.  


class ColliderBox

- CCollider을 상속받는 박스 충돌체 클래스. 마찬가지로 friend class로 CGameObject를 추가하고 다른 접근은 모두 차단한다.

- 기본 틀은 CCollider을 따라갈 것이기 때문에 코드를 일단 긁어와서 바꿔 준다.

 

- 추상 클래스가 아니므로 순수가상함수 선언부분은 제거한다.

 

- Init(), Update(), PostUpdate(), Render() 메소드에서는 부모의 메소드도 호출해준다.

-- Init()의 경우 부모의 Init() 메소드가 정상적으로 호출되었는지 확인하고 실패했으면 false를 리턴한다.

 


< CColliderBox() > 생성자

- CRef의 SetTypeID() 메소드를 실행시킨다.

- m_ColliderType을 박스로 설정해준다.


 

GameInfo.h

< struct BoxInfo >

- Vector2타입의 LT, RB 값을 가지고 있는다 -> Box 충돌체의 모양을 저장


class CColliderBox

< BoxInfo m_BoxInfo >

- 위에서 만든 구조체를 변수로 저장

- 위의 구조체 정보를 받아오는 GetInfo() 메소드도 만들어준다.

 

 

< float m_Width >
< float m_Height >

- 사이즈를 저장해놓을 변수. 생성자에서 기본값으로 100으로 설정해준다.

< void SetExtent() >

- 이 메소드를 통해 위의 변수들을 설정해준다


GameFrameworkStepbyStep_44_Collision3_BoxCollider.zip
4.16MB

- 충돌체 구조 준비는 끝

- 이제 CScene에서 이 충돌체를 생성하고, 반복문을 통해 전부 순회를 돌면서 충돌했는지를 확인해주면 된다.