본문 바로가기

Win32 api

Win32 api 강의 25 - 26화.

- 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