- Collider 클래스 설계.
// CCollider.h
...
class CObject;
class CCollider : public CComponent
{
private:
CObject* m_pOwner; // 콜라이더가 속한 오브젝트에 대한 포인터.
public:
void final_update();
public:
CCollider();
~CCollider();
friend class CObject;
};
final_update 는 update 에서 내부 로직 계산이 끝난 후 돌아가는 것임.
Scene 에서 모든 Object→final_update 호출 >> Object 에서 m_pCollider 가 있으면 m_pCollider→final_update 호출.
- Collider 렌더링.
// CCollider.h
...
Vector2 m_vOffsetPos; // 콜라이더의 위치 오프셋.
Vector2 m_vFinalPos; // 콜라이더의 최종 위치.
Vector2 m_vSize; // 콜라이더의 크기.
public:
void SetOffsetPos(const Vector2& offset) { m_vOffsetPos = offset; }
void SetSize(const Vector2& size) { m_vSize = size; }
inline Vector2 GetOffsetPos() const { return m_vOffsetPos; }
inline Vector2 GetSize() const { return m_vSize; }
public:
void final_update();
void render(HDC hDC);
...
};
Collider 박스를 그려주기 위한 offset, size 값을 설정해주고
// CCollider.cpp
...
void CCollider::final_update()
{
// 콜라이더의 최종 업데이트 로직 구현.
// 예: 충돌 검사, 위치 동기화 등.
if (m_pOwner)
{
// 오브젝트의 위치와 크기를 기반으로 콜라이더의 위치 및 크기 업데이트.
Vector2 pos = m_pOwner->GetPos();
m_vFinalPos = pos + m_vOffsetPos;
}
}
void CCollider::render(HDC hDC)
{
// 디버그 목적으로 콜라이더를 시각화하는 코드 구현.
if (hDC)
{
SelectGDI green = SelectGDI(hDC, PEN_TYPE::GREEN);
SelectGDI hollow = SelectGDI(hDC, BRUSH_TYPE::HOLLOW);
// 콜라이더의 위치와 크기를 기반으로 사각형 그리기.
Rectangle(hDC,
static_cast<int>(m_vFinalPos.x - m_vSize.x * 0.5f),
static_cast<int>(m_vFinalPos.y - m_vSize.y * 0.5f),
static_cast<int>(m_vFinalPos.x + m_vSize.x * 0.5f),
static_cast<int>(m_vFinalPos.y + m_vSize.y * 0.5f));
}
}
render 함수에서 그려준다. SelectGDI 클래스는 스마트 포인터처럼 DC 에 GDI 객체를 선택하고 다시 교체하는 과정을 알아서 해주는 것으로 보면 됨. 코드 지저분해져서 만든 것 뿐.
강의에서 컴포넌트 클래스를 먼저 설계하지 않는 게 아쉬울 따름이다 ㅠ.
'Win32 api' 카테고리의 다른 글
| Win32 api 강의 29 - 30화. (0) | 2025.09.18 |
|---|---|
| Win32 api 강의 27 - 28화. (0) | 2025.09.18 |
| Win32 api 강의 24화. (0) | 2025.09.17 |
| Win32 api 강의 23화. (0) | 2025.09.16 |
| Win32 api 강의 21 - 22화. (0) | 2025.09.16 |