응애맘마조
애니메이션 효과 구현 본문
애니메이션이 포함된 파일을 사용하여 키 입력이 되었을 때 애니메이션 효과를 구현하는 것이 과제였습니다.
#pragma once
class Scene2 : public Scene
{
private:
Grid* grid;
Actor* boss;
Actor* map;
Actor* map_floor;
Actor* kick;
bool sidekick;
float tick;
int ani = 0;
class Deadpool* dead;
public:
Scene2();
~Scene2();
virtual void Init() override;
virtual void Release() override; //해제
virtual void Update() override;
virtual void LateUpdate() override;//갱신
virtual void Render() override;
virtual void PreRender() override;
virtual void ResizeScreen() override;
void Animation(GameObject* root);
};
#include "stdafx.h"
#include "Solar.h"
#include "Deadpool.h"
#include "Scene2.h"
void Print12()
{
cout << TIMER->GetWorldTime() << endl;
}
Scene2::Scene2()
{
}
Scene2::~Scene2()
{
}
void Scene2::Init()
{
grid = Grid::Create();
map = Actor::Create();
map->LoadFile("map.xml");
map_floor = Actor::Create();
map_floor->LoadFile("map_floor.xml");
dead = new Deadpool();
dead->Init();
kick = Actor::Create();
kick->LoadFile("VanGuard.xml");
sidekick = false;
tick = 0.0f;
}
void Scene2::Release()
{
}
void Scene2::Update()
{
Camera::main->width = App.GetWidth();
Camera::main->height = App.GetHeight();
Camera::main->viewport.width = App.GetWidth();
Camera::main->viewport.height = App.GetHeight();
//debug
ImGui::Text("FPS: %d", TIMER->GetFramePerSecond());
//Hierarchy
ImGui::Begin("Hierarchy");
grid->RenderHierarchy();
dead->Hi();
map->RenderHierarchy();
map_floor->RenderHierarchy();
kick->RenderHierarchy();
ImGui::End();
map->Update();
grid->Update();
dead->Update();
kick->Update();
map_floor->Update();
}
void Scene2::LateUpdate()
{
Vector3 HitPoint;
////이용하여 맵 안에서 돌아다닐수있는 캐릭터 구현하기
if (Util::RayIntersectTri(dead->GetRay(),
map_floor->Find("Rectangle19"), HitPoint))
{
float Y = HitPoint.y - dead->lastPos.y;
//cout << Y << endl;
if (Y > 3.0f)
{
dead->BackMove();
cout << "BackMove" << endl;
}
else
{
//dead->isLanding = true;
}
//dead->SetWorldPos(HitPoint + Vector3(0, 7, 0));
//맵 위에 있을때
float dis = dead->root->GetWorldPos().y - HitPoint.y;
//바닥 뚫고 간거
if (dis < 0.0f)
{
dead->OnFloor(HitPoint);
}
}
//맵을 벗어났을때
else
{
dead->OutOfRange();
}
if (INPUT->KeyDown('Z'))
{
sidekick = true;
}
if (sidekick == true)
{
tick += 1.0f;
if (tick >= 3.0f)
{
kick->animations->aniFrame = ani;
tick = 0.0f;
ani++;
}
}
if (ani > 48)
{
ani = 0;
sidekick = false;
}
}
void Scene2::Render()
{
Camera::main->Set();
BLEND->Set(false);
grid->Render();
//dead->Render();
map->Render();
kick->Render();
}
void Scene2::PreRender()
{
}
void Scene2::ResizeScreen()
{
Camera::main->width = App.GetWidth();
Camera::main->height = App.GetHeight();
Camera::main->viewport.width = App.GetWidth();
Camera::main->viewport.height = App.GetHeight();
}
void Scene2::Animation(GameObject* root)
{
}
이번에는 조금 비효율적으로 되었습니다. 점차 해결해 나가는 식으로 하겠습니다.
읽어주셔서 감사합니다.
'공부 > 3D과제' 카테고리의 다른 글
다익스트라, 에이스타 (0) | 2023.07.12 |
---|---|
GPGPU, 컴퓨트 셰이더 (0) | 2023.07.11 |
모델 불러오기 (0) | 2023.06.29 |
키프레임 (0) | 2023.06.28 |
포워드 렌더링, 디퍼드 렌더링 (0) | 2023.06.27 |
Comments