- 애니메이션 프레임에 Offset 추가.
struct tAnimationFrame
{
Vector2 vStart; // 프레임의 시작 위치.
Vector2 vSize; // 프레임의 크기.
Vector2 vOffset; // 프레임의 오프셋.
float fFrameDuration; // 프레임의 지속 시간.
};
애니메이션 프레임 구조체에 오프셋 정보를 추가.
// CAnimation.cpp
...
void CAnimation::render(HDC hDC, Vector2 vPos)
{
if (!m_pTexture)
return;
// 현재 프레임의 사각형 영역 계산.
tAnimationFrame& frame = m_vecFrames[m_iCurFrame];
// 오프셋 적용.
Vector2 pos = vPos + frame.vOffset;
// 텍스처에서 현재 프레임을 hDC에 렌더링.
TransparentBlt(hDC,
static_cast<int>(pos.x - frame.vSize.x * 0.5f), static_cast<int>(pos.y - frame.vSize.y * 0.5f),
static_cast<int>(frame.vSize.x), static_cast<int>(frame.vSize.y),
m_pTexture->GetDC(),
static_cast<int>(frame.vStart.x), static_cast<int>(frame.vStart.y),
static_cast<int>(frame.vSize.x), static_cast<int>(frame.vSize.y),
RGB(255, 0, 255)); // 마젠타 색상을 투명색으로 사용.
}
오브젝트 위치 + 오프셋 보정을 해서, 애니메이션 이미지 위치를 원하는 위치로 보정할 수 있음.
구현하고자 하는 게임 장르 등에 따라 콜라이더와 캐릭터 이미지의 위치가 조금씩 달라지는데,
이걸 오프셋 입력을 통해 조정함.
- Camera 간단 구현.
// CCamera.h
#pragma once
class CObject;
class CCamera
{
SINGLETON(CCamera)
private:
Vector2 m_vPosition; // 카메라 위치.
CObject* m_pTarget; // 카메라가 따라다닐 타겟 오브젝트.
public:
inline const Vector2& GetPosition() const { return m_vPosition; }
inline void SetPosition(const Vector2& vPos) { m_vPosition = vPos; }
inline void SetTarget(CObject* pTarget) { m_pTarget = pTarget; }
inline Vector2 WorldToScreen(const Vector2& vWorldPos) const
{
return vWorldPos - m_vPosition;
}
public:
void update();
};
일반 오브젝트들의 스크린 좌표는 간단히 카메라 좌표를 뺀 상대 좌표로 하면 됨.
// CObject.cpp
...
void CObject::render(HDC hDC)
{
// 렌더링 전에 카메라의 위치 보정 적용.
Vector2 vRenderPos = CCamera::GetInstance()->WorldToScreen(m_ptPos);
// 오브젝트의 렌더링 로직 구현.
Rectangle(hDC,
static_cast<int>(vRenderPos.x - (m_ptSize.x * 0.5f)),
static_cast<int>(vRenderPos.y - (m_ptSize.y * 0.5f)),
static_cast<int>(vRenderPos.x + (m_ptSize.x * 0.5f)),
static_cast<int>(vRenderPos.y + (m_ptSize.y * 0.5f)));
component_render(hDC);
}
그다음 이렇게 오브젝트의 좌표를 스크린 좌표로 바꿔서 그려주면

테스트로 카메라를 이동시켜보면
오브젝트가 움직이지 않아도 상대 좌표를 계산하여 이동하는 것을 볼 수 있음.
'Win32 api' 카테고리의 다른 글
| Win32 api 강의 43화. (0) | 2025.09.23 |
|---|---|
| Win32 api 강의 41 - 42화. (0) | 2025.09.23 |
| Win32 api 강의 37 - 38화. (0) | 2025.09.22 |
| Win32 api 강의 35 - 36화. (0) | 2025.09.21 |
| Win32 api 강의 34화. (0) | 2025.09.20 |