응애맘마조
잔상 만들기 본문
꼬리를 물어 잔상을 만드는 것이 과제였습니다.
//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