๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“ Development Study/๐Ÿ’ป Win32API

Collider

by eazuooz 2022. 9. 27.

์˜ˆ์ œ :)

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

๋Œ“๊ธ€