응애맘마조

오브젝트 충돌 본문

공부/2D과제

오브젝트 충돌

TH.Wert 2023. 1. 12. 14:44

사각형의 플레이어 오브젝트를 움직였을 때 다른 오브젝트에 충돌했을 경우 움직이게 하는 것이 과제였습니다.

//main.cpp
#include "stdafx.h"
#include "Main.h"

void Main::Init()
{
	pl = new ObRect();
	pl->scale = Vector2(100.0f, 100.0f);
	pl->color = Color(0.0f, 0.0f, 0.0f, 0.5f);

	rc = new ObRect();
	rc->SetWorldPosX(300.0f);
	rc->color = Color(0.0f, 1.0f, 0.0f, 0.5f);
	rc->scale = Vector2(100.0f, 100.0f);

	cc = new ObCircle();
	cc->SetWorldPosX(-300.0f);
	cc->color = Color(0.0f, 0.0f, 1.0f, 0.5f);
	cc->scale = Vector2(100.0f, 100.0f);
}

void Main::Release()
{
	SafeDelete(pl);
	SafeDelete(cc);
	SafeDelete(rc);
}

void Main::Update()
{
	pl->Update();
	cc->Update();
	rc->Update();
}

void Main::LateUpdate()
{
    //사각형과 마우스 충돌
	if (pl->Intersect(INPUT->GetMouseWorldPos()))
	{
		if (INPUT->KeyPress(VK_LBUTTON))
		{
			Vector2 velocity = INPUT->GetMouseWorldPos() - lastPos;
			pl->MoveWorldPos(velocity);
		}
	}

	pl->Update();

	if (pl->Intersect(rc))
	{
		Vector2 dir = INPUT->GetMouseWorldPos() - lastPos;
		rc->MoveWorldPos(dir);
	}

	if (pl->Intersect(cc))
	{
		Vector2 dir = INPUT->GetMouseWorldPos() - lastPos;
		cc->MoveWorldPos(dir);
	}

	lastPos = INPUT->GetMouseWorldPos();
}

void Main::Render()
{
	pl->Render();
	cc->Render();
	rc->Render();
}

void Main::ResizeScreen()
{
}

int WINAPI wWinMain(HINSTANCE instance, HINSTANCE prevInstance, LPWSTR param, int command)
{
    app.SetAppName(L"Game1");
    app.SetInstance(instance);
	app.InitWidthHeight(1400.0f,800.0f);
	Main* main = new Main();
	int wParam = (int)WIN->Run(main);
	WIN->DeleteSingleton();
	SafeDelete(main);
	return wParam;
}

코드입니다.

 

읽어주셔서 감사합니다.

'공부 > 2D과제' 카테고리의 다른 글

deque, map  (0) 2023.01.17
잔상 만들기  (0) 2023.01.16
충돌에 따른 색깔 변화  (0) 2023.01.11
카메라 이동 2  (0) 2023.01.11
카메라 이동  (0) 2023.01.09
Comments