응애맘마조

잔상 만들기 본문

공부/2D과제

잔상 만들기

TH.Wert 2023. 1. 16. 23:34

꼬리를 물어 잔상을 만드는 것이 과제였습니다.

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

void Main::Init()
{
	player = new ObRect();
	player->scale = Vector2(100.0f, 100.0f);

	trailNum = 10;
	trail.resize(trailNum);

	for (auto it = trail.begin(); it != trail.end(); it++)
	{
		(*it) = new ObRect();
		(*it)->scale = Vector2(100.0f, 100.0f);
		(*it)->isVisible = false;
	}

	timer = 0.0f;
	index = 0;
	interval = 0.3f;
}

void Main::Release()
{
	SafeDelete(player);

	for (auto it = trail.begin(); it != trail.end(); it++)
	{
		SafeDelete(*it);
	}
}

void Main::Update()
{
	ImGui::SliderFloat("TrailInterval", &interval, 0.1f, 1.0f);
	float duration = trailNum * interval;
	ImGui::Text("TrailDuration : %.3f", duration);
	if (ImGui::SliderInt("TrailNum", &trailNum, 1, 30))
	{
		for (auto it = trail.begin(); it != trail.end(); it++)
		{
			SafeDelete(*it);
		}
		trail.resize(trailNum);
		for (auto it = trail.begin(); it != trail.end(); it++)
		{
			(*it) = new ObRect();
			(*it)->scale = Vector2(100.0f, 100.0f);
			(*it)->isVisible = false;
		}
	}

	if (TIMER->GetTick(timer, interval))
	{
		trail.front()->isVisible = true;
		trail.front()->SetWorldPos(player->GetWorldPos());
		trail.front()->rotation = player->rotation;
		trail.push_back(trail.front());
		trail.pop_front();
	}

	if (INPUT->KeyPress('W'))
	{
		player->MoveWorldPos(player->GetRight() * 200.0f * DELTA);
	}
	else if (INPUT->KeyPress('S'))
	{
		player->MoveWorldPos(-player->GetRight() * 200.0f * DELTA);
	}
	if (INPUT->KeyPress('A'))
	{
		player->rotation += 120.0f * ToRadian * DELTA;
	}
	else if (INPUT->KeyPress('D'))
	{
		player->rotation -= 120.0f * ToRadian * DELTA;
	}

	if (INPUT->KeyPress('E'))
	{
		player->SetWorldPos(trail.front()->GetWorldPos());
		player->rotation = trail.front()->rotation;
		for (auto it = trail.begin(); it != trail.end(); it++)
		{
			(*it)->isVisible = false;
		}
	}

	player->Update();

	for (auto it = trail.begin(); it != trail.end(); it++)
	{
		(*it)->Update();
	}
}

void Main::LateUpdate()
{
}

void Main::Render()
{
	for (auto it = trail.begin(); it != trail.end(); it++)
	{
		(*it)->Render();
	}
	player->Render();
}

void Main::ResizeScreen()
{
}

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

코드입니다.

 

읽어주셔서 감사합니다.

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

이동 제한  (0) 2023.01.17
deque, map  (0) 2023.01.17
오브젝트 충돌  (0) 2023.01.12
충돌에 따른 색깔 변화  (0) 2023.01.11
카메라 이동 2  (0) 2023.01.11
Comments