์์ :)
https://github.com/eazuooz/WindowAPI/commit/8ffba666f04241fcdc47b2d8305ecab441316e39
Component · eazuooz/WindowAPI@8ffba66
Show file tree Showing 22 changed files with 241 additions and 66 deletions.
github.com
์์ ๊ตฌ์กฐ
๊ฒ์ ์ค๋ธ์ ํธ๋ฅผ ์ค๊ณํ ๋ ๊ฐ์ฅ ๋ณดํธ์ ์ธ ๊ตฌ์กฐ๋ ์์์ ์ด์ฉํ ๊ณ์ธต ๊ตฌ์กฐ์ ๋๋ค.
๊ฐ์ฅ ๋ณดํธ์ ์ผ๋ก ์ฌ์ฉ ๋์๋ ์ค๋ธ์ ํธ ๊ณ์ธต ๊ตฌ์กฐ ์ค๊ณ์ ๋ํด ์ด์ผ๊ธฐ๋ฅผ ํด๋ณด๋ ค ํฉ๋๋ค.
๊ณ์ธต ๊ตฌ์กฐ ์ค๊ณ๋ ๋ง ๊ทธ๋๋ก ์ค๋ธ์ ํธ๊ฐ ํ๋ ๊ธฐ๋ฅ์ ์ค์ฌ์ผ๋ก ๊ณ์ธต์ ๋ง๋ค์ด ์ค๊ณ๋ฅผ ํ๋ ๊ฒ์ ๋๋ค.
Player, Monster, Prop์ ๊ณตํต๋ ๋ถ๋ถ์ GameObject์์ ์ฒ๋ฆฌ๋ฅผ ํ๊ณ
๋๋จธ์ง ๋ถ๋ถ์ ๊ฐ๊ฐ์ ์ค๋ธ์ ํธ ์์ ๊ตฌํํ์ฌ ์คํํ๋ฉด ๋ฉ๋๋ค.
์ฌ๊ธฐ์ Player์ Monster๋ ์์ง์ด๋ ๊ณ์ธต๊ตฌ์กฐ๋ฅผ ํ๋ ์ถ๊ฐํด๋ณด๊ฒ ์ต๋๋ค.
์์ง์ ๊ด๋ จ๋ ์ฒ๋ฆฌ๋ ์ด MovableObject์์ ํ๋ฉด ๋๊ณ
๊ทธ ์ธ์ Player, Monster์ ํนํ๋ ๋ค๋ฅธ ์ฒ๋ฆฌ๋ค์ ๊ฐ๊ฐ ํ๋ฉด ๋๊ฒ ์ฃ
์ฌ๊ธฐ์ ์ด์ Trigger ๋ผ๋ ์ค๋ธ์ ํธ๋ฅผ ์ถ๊ฐํ๋ ค๊ณ ํฉ๋๋ค.
๊ทธ๋ฐ๋ฐ Trigger์ ํ๋ฉด์ ๊ทธ๋ ค์ง์ง ์๋ ์ค๋ธ์ ํธ์
๋๋ค. Player, Monster, Prop๊ณผ๋ ๋ค๋ฅธ ์์ฑ์ด ์๊ธด ๊ฒ์ด์ฃ .
๊ทธ๋ ๋ค๋ฉด ์ญ์ ๊ทธ๋ ค์ง๋ ๊ฒ์ ์ฒ๋ฆฌํ๋ ๊ณ์ธต์ ํ๋ ๋ ์ถ๊ฐํ๋ ๊ฒ์
๋๋ค.
์ด์ ๊ทธ๋ ค์ง๋ ๋ถ๋ถ์ RenderableObject์์ ์ฒ๋ฆฌ๋ฅผ ํ๋ฉด ๋๋ ์ค๋ณต ์ฝ๋๋ ์๊ณ ์์ฃผ ๊น๋ํ๊ฒ ํด๊ฒฐ์ด ๋์์ต๋๋ค.
์ด๋ฐ ์์ผ๋ก ๊ณตํต๋ ๋ถ๋ถ๋ค์ ๋ฌถ์ด์ ์ค๊ฐ๊ณ์ธต์ ์ถ๊ฐํ์ฌ ์ค๊ณํด ๋๊ฐ๋ ๋ฐฉ์์
๊ฒ์ ์ค๋ธ์ ํธ์ ๊ณ์ธต ๊ตฌ์กฐ ์ค๊ณ ๋ผ๊ณ ํฉ๋๋ค.
ํ์ง๋ง ๊ฒ์์ด ์ ์ ๋ณต์กํด์ง์ ๋ฐ๋ผ ๊ฒ์ ์ค๋ธ์ ํธ์ ํ์
๋ ๋ค์ํด์ง๊ณ ํ๋ ์ผ๋ ๋ง์์ ธ์,
๊ณ์ธต ๊ตฌ์กฐ ์ค๊ณ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฒ์ ์ค๋ธ์ ํธ๋ฅผ ๋ง๋๋๋ฐ ์ด๋ ค์์ด ์๊ธฐ๊ธฐ ์์ํ์์ต๋๋ค.
์๋ฅผ ๋ค์ด ์ ์ํฉ์์ Camera๋ฅผ ์ถ๊ฐํ๋ค๊ณ ๊ฐ์ ํด๋ด
์๋ค.
์นด๋ฉ๋ผ๋ ํ๋ฉด์ ๊ทธ๋ ค์ง๋ ์ค๋ธ์ ํธ๊ฐ ์๋๋๊น ์ด๋ ๊ฒ ์ถ๊ฐํ๋ฉด ๋๋ ๊ฒ์ผ๊น์?
์นด๋ฉ๋ผ๋ ํ๋ฉด์ ๊ทธ๋ ค์ง์ง ์์ง๋ง ์์ง์ผ ์๋ ์์ต๋๋ค.
๊ทธ๋ผ ์์ง์ผ ์ ์๋ ์ค๋ธ์ ํธ๋๊น ์ด๋ ๊ฒ ์ถ๊ฐํ๋ฉด ๋๋ ๊ฒ์ผ๊น์?
์ํ๊น๊ฒ๋ ์นด๋ฉ๋ผ๋ ํ๋ฉด์ ๊ทธ๋ ค์ง๋ ์ค๋ธ์ ํธ๊ฐ ์๋๋๋ค!!
๊ทธ๋ ค์ง์ง ์์ง๋ง ์์ง์ผ ์๋ ์๋ ์ค๋ธ์ ํธ๊ฐ ์๊ธฐ๋ ์ฝ๊ฐ ๊ณจ์น๊ฐ ์ํ์ก์ต๋๋ค.
์ด์ฉ ์ ์์ด Prop๊ณผ Trigger์๊ฒ๋ ๋ฏธ์ํ์ง๋ง GameObject์์ ์์ง์ ์ฒ๋ฆฌ๋ฅผ ํ๊ณ
Prop๊ณผ Trigger์์๋ ์ฌ์ฉํ์ง ์๊ธฐ๋ก ํด๋ด
์๋ค.
์ด๋ ๊ฒ ๋ง๋ค๊ณ ๋ณด๋ ํด๋์ค ๊ณ์ธต ๊ตฌ์กฐ๋ง ๋ณด๋ฉด ๋ ๊น๋ํด์ง ๊ฒ ๊ฐ์ต๋๋ค.
ํด๋์ค ๊ณ์ธต ๊ตฌ์กฐ๋ ๋ ๊น๋ํด์ก์ง๋ง GameObject์ ๋น์ค์ ์ ์ ๋ ์ปค์ ธ๋ง ๊ฐ๋๋ค.
์ค๋ธ์ ํธ์ ํ์
์ด ๋์ด๋๋ฉด ๋์ด๋ ์๋ก ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋ ์๋ก ์ ์ ๋ ์ค๊ณ๋ ๋ณต์กํด์ง๊ณ ์์ ๊ณ์ธต์ ๋น๋ํด์ง๋๋ค.
๊ทธ๋์ ์ด๋ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ปดํฌ๋ํธ ๊ธฐ๋ฐ ์ค๊ณ๊ฐ ๋ถ๊ฐ๋๊ธฐ ์์ํ์์ต๋๋ค.
์ปดํฌ๋ํธ ๊ตฌ์กฐ
๊ฒ์ ์ค๋ธ์ ํธ์ ์ปดํฌ๋ํธ ๊ตฌ์กฐ๋ ์์๊ตฌ์กฐ์ ๋ฌธ์ ์ ์ ๋ณด์ํ๊ณ ์ ์ ์๋ ์ค๊ณ ๋ฐฉ๋ฒ์ ๋๋ค.
์ปดํฌ๋ํธ ๊ธฐ๋ฐ ์ค๊ณ๋ ๊ฒ์ ์ค๋ธ์ ํธ๊ฐ ํด์ผ ํ ๊ธด์ผ๋ค์ ๊ฐ๊ฐ ๋ณ๋์ ๊ฐ์ฒด์ ๋ถํ ํ์ฌ
๊ฒ์ ์ค๋ธ์ ํธ์ ํด๋์ค ๊ธฐ๋ฅ์ด ๋น๋ํ ๋๋ ๋ฌธ์ ์ ์ ํด๊ฒฐํ๋ ์ค๊ณ์
๋๋ค.
์ปดํฌ๋ํธ ๊ธฐ๋ฐ ์ค๊ณ์์ ๊ฒ์ ์ค๋ธ์ ํธ๋ ๊ฐ ํ์ ์ ๋ฐ๋ผ ์ฌ์ฉ๋๋ ์ปดํฌ๋ํธ๋ค๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
์ค๋ธ์ ํธ๋ง๋ค ํ์ํ ๊ธฐ๋ฅ์ด ์๋ค๋ฉด ๊ทธ ๊ธฐ๋ฅ์ ํ๋์ ์ปดํฌ๋ํธ๋ก ๋ง๋ค๊ณ ์ปดํฌ๋ํธ๋ค์ ์ถ๊ฐํ์ฌ ํ๋์ ๊ฒ์ ์ค๋ธ์ ํธ๋ฅผ
๊ตฌ์ฑํฉ๋๋ค. ๊ฒ์ ์ค๋ธ์ ํธ๋ ๋จ์ง ์ฌ๋ฌ๊ฐ์ ์ปดํฌ๋ํธ๋ค์ ๊ด๋ฆฌ ํ ๋ฟ์ด์ฃ .
์ด๋ฏธ ์ ๋ํฐ ์์ง๊ณผ ์ธ๋ฆฌ์ผ์์ง์์๋ ์ด๋ฌํ ์ปดํฌ๋ํธ ๊ธฐ๋ฐ ๊ตฌ์กฐ๋ฅผ ์ฑํํ์ฌ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
์ด์ ์ฐ๋ฆฌ ํ๋ก์ ํธ๋ ์ด ๊ธฐ๋ฐ์ผ๋ก ๊ฒ์ ์ค๋ธ์ ํธ๋ฅผ ์ค๊ณํ์ฌ ๋ณด๊ฒ ์ต๋๋ค.
class Component : public Entity
{
public:
Component(eComponentType type);
~Component();
virtual void Tick() = 0;
virtual void Render(HDC hdc) {}
private:
const eComponentType mType;
};
class Component;
class Object : public Entity
{
public:
Object();
~Object();
virtual void Tick();
virtual void Render(HDC hdc);
void AddComponent(Component* component);
public:
void SetPos(Vector2 pos) { mPos = pos; }
void SetScale(Vector2 scale) { mScale = scale; }
Vector2 GetPos() { return mPos; }
Vector2 GetScale() { return mScale; }
private:
Vector2 mPos;
Vector2 mScale;
std::vector<Component*> mComponents;
};
void Object::Tick()
{
for (Component* component : mComponents)
{
component->Tick();
}
}
void Object::Render(HDC hdc)
{
for (Component* component : mComponents)
{
component->Render(hdc);
}
}
void Object::AddComponent(Component* component)
{
mComponents.push_back(component);
}
์ค๋ธ์ ํธ๋ ์ฌ๋ฌ๊ฐ์ ์ปดํฌ๋ํธ๋ฅผ ๊ฐ์ง๊ณ ์๊ณ ๊ฐ๊ฐ์ ์ปดํฌ๋ํธ๋ค์ ์ํํ๋ฉด์ Render์ Tick ํจ์๋ง์ ํธ์ถํด์ฃผ๊ณ ์์ต๋๋ค. ๊ทธ๋ฌ๋ฉด ์ด ์ปดํฌ๋ํธ๋ค์ ์์๋ฐ์ Animation , Collider ์ปดํฌ๋ํธ๋ค์ ๊ฐ์ํจ์๋ฅผ ์ด์ฉํด์ ๊ตฌํ์ด ๋๋ถ๋ถ๋ค์ด ์์๊ฐ์ฒด๋ค๋ก ์์์ ํธ์ถ์ด ๋ ๊ฒ ์ ๋๋ค.
class Collider : public Component
{
public:
Collider();
~Collider();
virtual void Tick() override;
virtual void Render(HDC hdc) override;
private:
};
class Animator : public Component
{
public:
Animator();
~Animator();
virtual void Tick() override;
};
'๐ Development Study > ๐ป Win32API' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Collider Manager (1) | 2022.09.30 |
---|---|
Collider (0) | 2022.09.27 |
Path, Resource Load (1) | 2022.09.22 |
Resources, Brush, Pen (0) | 2022.09.20 |
Double Buffering (0) | 2022.09.19 |
๋๊ธ