์์ :)
https://github.com/eazuooz/WindowAPI/commit/f6b865acb40a78dbbbdb14e8210544089b24c8b9
Camera · eazuooz/WindowAPI@f6b865a
Show file tree Showing 17 changed files with 229 additions and 84 deletions.
github.com
๊ฒ์์์๋ ์นด๋ฉ๋ผ๊ฐ ํ์ํ๋ค.
ํ๋ฉด์ ๋ณด์ด๋ ๋ถ๋ถ๊ณผ ์ค์ ๊ฒ์์ ์๋ ์์ญ์ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋ฆฌ๊ณ ์ฌ๋ฌ๊ฐ์ง ์นด๋ฉ๋ผ์ ์์น๋ ์์ง์์ ๋ฐ๋ผ์ ํ๋ฉด์ ๋ณด์ด๋ ์์ญ์ ๋ค๋ฅด๊ฒ ํ๊ธฐ ์ํด์ ์นด๋ฉ๋ผ๋ ๊ฒ์์์
๊ผญ ํ์ํ ์กด์ฌ์ด๋ค.
Camera๋ ํ๋ฉด์ ํด์๋์ ์นด๋ฉ๋ผ๊ฐ ๋ณด๊ณ ์๋ ์ขํ, ํ๋ฉด ํด์๋ ์ค์ฌ ์ขํ์ ํ์ฌ ์นด๋ฉ๋ผ Look ๊ฐ์ ์ฐจ์ด๊ฐ์ ๊ฐ์ง๊ณ ์๋ค.
class Object;
class Camera
{
public:
static void Initialize();
static void Tick();
static Vector2 CalulatePos(Vector2 pos) { return pos - mDistance; }
static void SetTarget(Object* object) { mTarget = object; }
private:
Camera() = delete;
~Camera() = delete;
private:
static Size mResolution; // ํ๋ฉด ํด์๋
static Vector2 mLookPosition; // ์นด๋ฉ๋ผ๊ฐ ๋ณด๊ณ ์๋ ์ขํ
static Vector2 mDistance; // ํ๋ฉด ํด์๋ ์ค์ฌ ์ขํ์ ํ์ฌ ์นด๋ฉ๋ผ Look ๊ฐ์ ์ฐจ์ด
static Object* mTarget;
};
์นด๋ฉ๋ผ๊ฐ ํ๋ฉด ๊ฐ์ด๋ฐ๋ฅผ ๋ณด๊ฒ ํ๊ธฐ ์ํด์ ์ฐ๋ฆฌ ํ๋ก๊ทธ๋จ์ ์ค๊ฐ์ขํ๋ฅผ ๊ตฌํด์ผํ๋ค.
Win32 ์ขํ๊ณ๋ ์ข์๋จ์ด 0,0 ์ด๊ธฐ๋๋ฌธ์ ์นด๋ฉ๋ผ๋ฅผ ํ๋ฉด ํด์๋์ ์ ๋ฐ๋งํผ ์ด๋ํด์ฃผ์ด์ผ ํ๋ค.
void Camera::Initialize()
{
WindowData winData = Application::GetInstance().GetWindowData();
mResolution.y = winData.height;
mResolution.x = winData.width;
mLookPosition = (mResolution / 2.0f);
}
void Camera::Tick()
{
// ์๊ฐ ๋๊ธฐํ
if (KEY_PREESED(KEY_CODE::UP))
{
mLookPosition.y -= Time::DeltaTime() * 500.0f;
}
if (KEY_PREESED(KEY_CODE::DOWN))
{
mLookPosition.y += Time::DeltaTime() * 500.0f;
}
if (KEY_PREESED(KEY_CODE::LEFT))
{
mLookPosition.x -= Time::DeltaTime() * 500.0f;
}
if (KEY_PREESED(KEY_CODE::RIGHT))
{
mLookPosition.x += Time::DeltaTime() * 500.0f;
}
if(mTarget != nullptr)
mLookPosition = mTarget->GetPos();
mDistance = mLookPosition - (mResolution / 2.0f);
}
๊ทธ๋ฆฌ๊ณ ๊ฐ๊ฐ์ Object๋ค์ ๋ ๋๋ง ์ขํ๋ค์ ๊ณ์ฐํ ๋ Camera์ขํ๋ก ๋ค์ ๊ณ์ฐํ ์ขํ๋ฅผ ์ธํ ํด์ฃผ๋ฉด ๋๋ค.
์ค์ ์นด๋ฉ๋ผ๊ฐ ํ๋ช ์ค์ฌ ์ขํ ๊ธฐ์ค์ผ๋ก ์ด๋ํ ๊ฑฐ๋ฆฌ๋งํผ ์ฐ๋ฆฌ ๋ฌผ์ฒด๋ค๋ ๊ทธ๊ฑฐ๋ฆฌ๋งํผ ๋บด์ค ๊ฐ์ผ๋ก ๋ค์ ์ขํ๋ฅผ ์ธํ ํด์ฃผ๋ฉด๋๋ค.
// ์นด๋ฉ๋ผ ๊ธฐ์ค ์ขํ ๊ณ์ฐ
static Vector2 CalulatePos(Vector2 pos) { return pos - mDistance; }
void Player::Render(HDC hdc)
{
Image* pImage
= Resources::Load<Image>(L"PlayerImage", L"..\\Resources\\Images\\Fighter.bmp");
if (nullptr == pImage)
return;
Vector2 vPos = GetPos();
vPos = Camera::CalulatePos(vPos);
TransparentBlt(hdc, (int)vPos.x - pImage->GetWidth() / 2
, (int)vPos.y - pImage->GetHeight() / 2
, pImage->GetWidth(), pImage->GetHeight()
, pImage->GetDC(), 0, 0, pImage->GetWidth(), pImage->GetHeight(), RGB(255, 0, 255));
Object::Render(hdc);
}
'๐ Development Study > ๐ป Win32API' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Object Delete (0) | 2022.10.12 |
---|---|
Alphablend, Camera Effect (0) | 2022.10.05 |
Collider Manager (1) | 2022.09.30 |
Collider (0) | 2022.09.27 |
Component (0) | 2022.09.26 |
๋๊ธ