์์ :)
https://github.com/eazuooz/WindowAPI/commit/31479a153c2e9b7ae3ef6882acc55d91ebc60bce
Collider · eazuooz/WindowAPI@31479a1
Show file tree Showing 30 changed files with 281 additions and 70 deletions.
github.com
์ถฉ๋์ฒดํฌ
์ถฉ๋๊ฒ์ฌ๋ ๊ฒ์ ์ค๋ธ์ ํธ๋ผ๋ฆฌ ์ถฉ๋์ด ์ผ์ด๋ฌ๋์ง ๊ฒ์ฌํ๊ณ ๋ ํน์ ์ฒ๋ฆฌ๋ฅผ ํ๋ ๊ฒ์ ๋งํ๋ค.
์ถฉ๋ ๊ฒ์ฌ๋ ์ฌ๋ฌ๋ฐฉ์์ด ์กด์ฌํ๋ค.
Collider
Collider ์ปดํฌ๋ํธ๋ ๋ฌผ๋ฆฌ ์ถฉ๋ ์ฒ๋ฆฌ๋ฅผ ์ํ ์ค๋ธ์ ํธ๋ฅผ ์๋ฏธํฉ๋๋ค.
๊ฒ์์ ๋ง๋๋ ๊ณผ์ ์์๋ ์ฝ๋ผ์ด๋๊ฐ ์ฐ๋ฆฌ๋์ ๋ณด์ด๋ฉด ํธ๋ฆฌํ์ง๋ง ์ค์ ๋ก ๊ฒ์์ด ์๋น์ค ๋ ๋๋ ์ฝ๋ผ์ด๋๋
๋์ ๋ณด์ด์ง ์๋ ์์๊ฐ ๋ฉ๋๋ค.
์ฝ๋ผ์ด๋๋ ๊ผญ ์ค๋ธ์ ํธ์ ๋์ผํ ๋ชจ์ต์ผ ํ์๋ ์์ผ๋ฉฐ, ์ค์ ๋ก ๊ฒ์ ํ๋ ์ด ์์๋ ๋๋ต์ ์ธ ๊ทผ์ฌ์น ํํ๋ก
๋ง๋ค์ด์ฃผ๋๊ฒ ๋ ํจ์จ์ ์ ๋๋ค.
์์ ๊ฐ์ด ๋ณดํต์ ์ค์ ๋ชจ๋ธ์ ๋๋ต์ ์ผ๋ก ํํํ ์ ์๋ ์ถฉ๋์ฒด(๋ณด๋ผ์ ๋ํ) ํฌ๊ธฐ๋ก ์ค์ ํฉ๋๋ค.
class Collider : public Component
{
public:
Collider();
~Collider();
virtual void Tick() override;
virtual void Render(HDC hdc) override;
void SetScale(Vector2 scale) { mScale = scale; }
void SetOffset(Vector2 offset) { mOffset = offset; }
private:
Vector2 mOffset;
Vector2 mScale;
Vector2 mPos;
};
void Collider::Tick()
{
Object* pOwner = GetOwner();
mPos = pOwner->GetPos() + mOffset;
}
void Collider::Render(HDC hdc)
{
Pen pen(hdc, Application::GetInstance().GetPen(ePenColor::Green));
Brush brush(hdc, Application::GetInstance().GetBrush(eBrushColor::Transparent));
Rectangle(hdc, (int)(mPos.x - mScale.x / 2.f)
, (int)(mPos.y - mScale.y / 2.f)
, (int)(mPos.x + mScale.x / 2.f)
, (int)(mPos.y + mScale.y / 2.f));
}
Collider ์ปดํฌ๋ํธ์์ ์๋ก์ด ์ฌ๊ฒฉํ์ ๊ทธ๋ ค์ฃผ๊ณ ์์ต๋๋ค.
์ด ๊ทธ๋ ค์ง ์ฌ๊ฐํ์ ์ ํฌ๋ ์ถฉ๋์ฒด๋ก ์ฌ์ฉํ๋ ค๊ณ ํฉ๋๋ค.
ํด๋น ์ถฉ๋์ฒด๋ฅผ ๊ทธ๋ฆด๋ ์ค๋ธ์ ํธ ์ถฉ๋์ฒด๋ฅผ ๊ธฐ์ค์ผ๋ก ์ถฉ๋์ฒด์ ํฌ๊ธฐ๊ฐ ์กฐ์ ๊ฐ๋ฅํ๊ฒ
์๋ก์ด ์ขํ(mOffset)์ผ๋ก ๊ทธ๋ ค์ฃผ๊ฒ ์ต๋๋ค.
class Object;
class Scene : public Entity
{
public:
Scene();
virtual ~Scene();
virtual void Initialize() = 0;
virtual void Tick();
virtual void Render(HDC hdc);
void AddObject(Object* object, eColliderLayer type);
private:
std::vector<std::vector<Object*>> mObjects;
};
๊ทธ๋ฆฌ๊ณ Objects๋ค์ ํ๋ฒ์ ๋ค๊ณ ์๋๊ฒ์ด ์๋๋ผ
์ถฉ๋ํด์ผํ ์ถฉ๋๊ณ์ธต(๋ ์ด์ด)๋ก ๋๋์ด์ 2์ฐจ์ ๋ฐฐ์ด๋ก ๋ค๊ณ ์๋ค.

์๋ ๊ฒ ์๊ธด 2์ฐจ์ ๋ฐฐ์ด๊ตฌ์กฐ๋ก ๊ฒ์ ์ค๋ธ์ ํธ๋ฅผ ๊ด๋ฆฌํด์ค๋ค.
Scene::Scene()
{
mObjects.resize(_COLLIDER_LAYER);
}
Scene::~Scene()
{
for (size_t y = 0; y < (UINT)eColliderLayer::End; y++)
{
for (size_t x = 0; x < mObjects[y].size(); ++x)
{
if(mObjects[y][x] != nullptr)
delete mObjects[y][x];
}
}
}
void Scene::Tick()
{
for (size_t y = 0; y < (UINT)eColliderLayer::End; y++)
{
for (size_t x = 0; x < mObjects[y].size(); ++x)
{
if (mObjects[y][x] != nullptr)
mObjects[y][x]->Tick();
}
}
}
void Scene::Render(HDC hdc)
{
for (size_t y = 0; y < (UINT)eColliderLayer::End; y++)
{
for (size_t x = 0; x < mObjects[y].size(); ++x)
{
if (mObjects[y][x] != nullptr)
mObjects[y][x]->Render(hdc);
}
}
}
void Scene::AddObject(Object* object, eColliderLayer type)
{
mObjects[(UINT)type].push_back(object);
}
'๐ Development Study > ๐ป Win32API' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Camera (1) | 2022.10.04 |
---|---|
Collider Manager (1) | 2022.09.30 |
Component (0) | 2022.09.26 |
Path, Resource Load (1) | 2022.09.22 |
Resources, Brush, Pen (0) | 2022.09.20 |
๋๊ธ