- Camera 스크립트 수정.
// CCamera.h
class CCamera
{
SINGLETON(CCamera)
private:
Vector2 m_vPosition; // 카메라 위치.
CObject* m_pTarget; // 카메라가 따라다닐 타겟 오브젝트.
Vector2 m_vDiff; // 타겟과 카메라 위치의 차이.
public:
...
void CalculateDiff();
inline Vector2 WorldToScreen(const Vector2& vWorldPos) const
{
return vWorldPos + m_vDiff;
}
public:
void update();
};
지난 강의에서 카메라 부분을 수정함. 스크린 좌표로 변환할 때, 단순히 카메라와의 상대 좌표를 계산하는 것에 문제가 있었음.
카메라가 타겟 오브젝트를 따라다니게 되면 화면 정중앙에 위치할 수가 없게 되는 문제임.
그래서 화면 정중앙과 카메라의 차이 벡터 m_vDiff 를 업데이트마다 계산해주고, 이 값을 오브젝트 위치 벡터에 더해주면 스크린 좌표로 변환하는 것이 맞다.
- 마우스 좌표 갱신.
// CKeyMgr.h
enum class KEY
{
...
LBUTTON,
RBUTTON,
END
};
...
class CKeyMgr
{
...
Vector2 m_vMousePos; // 마우스 좌표.
...
public:
...
inline const Vector2& GetMousePos() const { return m_vMousePos; }
};
Key Manager 에 마우스 관련 멤버들을 선언해주고
// CKeyMgr.cpp
...
int g_arrVK[(int)KEY::END] =
{
...
VK_LBUTTON, // LBUTTON
VK_RBUTTON, // RBUTTON
};
...
void CKeyMgr::update()
{
...
// 포커싱이 되어 있으면 키 상태 갱신.
if(hWnd != nullptr)
{
...
// 마우스 좌표 갱신.
POINT ptMouse = {};
GetCursorPos(&ptMouse);
ScreenToClient(CCore::GetInstance()->GetMainHwnd(), &ptMouse);
m_vMousePos = Vector2((float)ptMouse.x, (float)ptMouse.y);
}
...
update 마다 **화면상 마우스 위치 → 클라이언트 좌표로 변환** 해주는 두 함수를 통해 멤버 변수에 마우스 위치를 저장해둠.
카메라 클래스에 추가로
inline Vector2 WorldToScreen(const Vector2& vWorldPos) const
{
return vWorldPos + m_vDiff;
}
inline Vector2 ScreenToWorld(const Vector2& vScreenPos) const
{
return vScreenPos - m_vDiff;
}
스크린 좌표를 월드 좌표로 변환해주는 메소드를 추가해주면
이제 마우스 좌표를 게임 내 월드 좌표로 변환해줄 수 있음!
- 부드러운 카메라 움직임 구현.
// CCamera.cpp
...
void CCamera::update()
{
if (m_pTarget)
{
if(m_pTarget->IsDeleted())
{
m_pTarget = nullptr;
}
else
{
// 이전에 m_vPosition 을 m_vTargetPosition 으로 변경.
m_vTargetPosition = m_pTarget->GetPos();
}
}
// 부드럽게 이동(선형 보간).
m_vPosition = Vector2::lerp(m_vPosition, m_vTargetPosition, DELTATIMEF * m_fSmoothSpeed);
CalculateDiff();
}
간단하게 Vector2 구조체에 구현해둔 선형 보간 함수 lerp 를 사용함.
'Win32 api' 카테고리의 다른 글
| Win32 api 강의 44 - 45화. (0) | 2025.09.24 |
|---|---|
| Win32 api 강의 43화. (0) | 2025.09.23 |
| Win32 api 강의 39 - 40화. (0) | 2025.09.22 |
| Win32 api 강의 37 - 38화. (0) | 2025.09.22 |
| Win32 api 강의 35 - 36화. (0) | 2025.09.21 |