본문 바로가기

Win32 api

Win32 api 강의 17 - 18화.

- CObject 의 파생 클래스 CPlayer 와 CMonster

 // CObject.h
 ...
    virtual void update() PURE;
    virtual void render(HDC hDC);

 

update 를 pure function 으로 만들어서 CObject 를 abstract 클래스로 만들어줌. render 도 virtual 함수로 만들어주고...

// CPlayer.cpp
void CPlayer::update()
{          
    Vector2 pos = GetPos();
    // 오브젝트의 상태 업데이트 로직 구현.
    if (CKeyMgr::GetInstance()->GetKeyState(KEY::RIGHT) == KEY_STATE::HOLD)
    {
        pos.x += 200.f * DELTATIMEF;
    }
    if (CKeyMgr::GetInstance()->GetKeyState(KEY::LEFT) == KEY_STATE::HOLD)
    {
        pos.x -= 200.f * DELTATIMEF;
    }
    if (CKeyMgr::GetInstance()->GetKeyState(KEY::UP) == KEY_STATE::HOLD)
    {
        pos.y -= 200.f * DELTATIMEF;
    }
    if (CKeyMgr::GetInstance()->GetKeyState(KEY::DOWN) == KEY_STATE::HOLD)
    {
        pos.y += 200.f * DELTATIMEF;
    }

    SetPos(pos);
}

 

입력에 따른 움직임 처리는 Player 클래스에서 처리.

void CMonster::update()
{
    Vector2 pos = GetPos();

    pos.x += (m_bRight ? 1.f : -1.f) * m_fSpeed * CTimeMgr::GetInstance()->GetDeltaTimeF();

    if (Vector2::distanceSquared(m_vCenterPos, pos) >= m_fMoveDistance * m_fMoveDistance)
    {
        // 중심 위치에서 이동 거리를 초과했을 때, 방향 전환 및 위치 보정.
        pos = (m_vCenterPos + (m_bRight ? Vector2::right : Vector2::left) * m_fMoveDistance);
        m_bRight = !m_bRight;
    }

    SetPos(pos);
}

 

몬스터는 혼자서 좌우로 움직이도록 구현해줌.

 

-CMissile 클래스.

// CMissile.h
#pragma once
#include "CObject.h"
class CMissile : public CObject
{
private:
    Vector2 m_vDirection;
    float m_fSpeed;

public:
    void SetDirection(const Vector2& dir) { m_vDirection = dir.normalized(); }
    void SetSpeed(float speed) { m_fSpeed = speed; }

public:
    virtual void update() override;
    virtual void render(HDC hDC) override;
    ...
};

 

간단한 클래스. 그냥 Player 에서 입력하면 발사되는 투사체.

void CPlayer::CreateMissile()
{
    CMissile* pMissile = new CMissile();

    pMissile->SetPos(GetPos() + m_vMissileOffset);
    pMissile->SetSize(Vector2(10.f, 30.f));
    pMissile->SetDirection(Vector2::up);
    pMissile->SetSpeed(300.f);

    CSceneMgr::GetInstance()->GetCurScene()->AddObject(pMissile, GROUP_TYPE::MISSILE);
}

 

Player 측에서 생성하고 현재 Scene 에 추가해준다.

'Win32 api' 카테고리의 다른 글

Win32 api 강의 23화.  (0) 2025.09.16
Win32 api 강의 21 - 22화.  (0) 2025.09.16
Win32 api 15 - 16화.  (0) 2025.09.14
Win32 api 강의 13 - 14화.  (0) 2025.09.14
Win32 api 강의 12화.  (0) 2025.09.13