- 작업내용
- 애니메이션 역재생 기능 추가
기존에 작업해두었던 애니메이션 기능을 정해진 프레임 순서대로만 출력하는 것이 아니라 반대로도 출력가능하도록 수정하였다.
기존의 애니메이션이 실행되는 방식은 각 애니메이션 사이의 구간인 Inters 인덱스 내부를 현재 프레임에서 엔드프레임까지 시작 프레임에 해당되는 인덱스 값을 빼주는 방식으로 순차적으로 작동하도록 만들었었다.
그런데 이 경우에는 무조건 값이 줄어들기만 하기 때문에 지정된 시트에서 역방향에 해당되는 재생은 불가능했다.
이를 개선하기 위해서 이번에는 Sprite의 갯수 하나를 한 Frame이라고 가정하고 순회할 Inters의 값의 절대값을 사용해 전체 프레임을 Resize해주었다. 절대값을 사용하는 이유는 인덱스를 작은쪽에서 큰 쪽을 빼도록 하면 결과로 나오는 프레임 값이 음수가 되기 때문에 이에 맞춰 resize를 해줄 수 없으므로, 이를 보간해주기 위해 사용했다.
이렇게 resize된 값을 가지고 내부를 순회할 때 프레임의 방향은 역으로 하나씩 줄어들어야 하기에 -1을 방향으로 지정해주고 시작부분부터 순차적으로 값이 줄어들도록 만들었다.
Animation.Inters.resize(abs(static_cast<int>(Animation.EndFrame - Animation.StartFrame)) + 1);
Animation.Frames.resize(abs(static_cast<int>(Animation.EndFrame - Animation.StartFrame)) + 1);
int FrameDir = 1;
if (_Start > _End)
{
FrameDir = -1;
}
size_t Start = _Start;
for (size_t i = 0; i < Animation.Inters.size(); i++)
{
Animation.Frames[i] = Start;
Animation.Inters[i] = _Inter;
Start += FrameDir;
}
기능이 잘 작동되는지 테스트 하기 위해서 Dash 애니메이션을 수정해보았다.
<일반 재생>
MainRenderer->CreateAnimation("Down_Dash", "FRONT_COMPLETE.bmp", 23, 25, 0.1f, false);
<역재생>
MainRenderer->CreateAnimation("Down_Dash", "FRONT_COMPLETE.bmp", 25, 23, 0.1f, false);
인덱스를 큰 쪽에서부터 시작해 작은 쪽에서 끝나도록 지정하면 애니메이션이 역재생 된다.
- 렌더링 오더(순서) 설정
지금까지는 배경용 렌더러가 만들어진 이후 플레이어의 렌더러가 생성되도록 하여 플레이어의 모습이 배경 위로 출력되게 만들었다. 하지만 무기나 눈에 보이지 않는 특정 장애물과 같이 경우에 따라서 렌더링 순서가 바뀌어야 하는 객체들이 추후 많아지면 순서에 맞춰서 렌더링하기가 까다롭기 때문에 아예 렌더링 Order를 다르게 지정해줄 수 있는 기능을 추가했다.
std::list<GameEngineRenderer*>& PrevRenders = Camera->Renderers[GetOrder()];
PrevRenders.remove(this);
GameEngineObject::SetOrder(_Order);
std::list<GameEngineRenderer*>& NextRenders = Camera->Renderers[GetOrder()];
NextRenders.push_back(this);
특정 키를 누르면 현재 카메라에서 관리하고 있는 렌더러들의 우선순위를 체크해서 해당 렌더러를 그 리스트에서 지우고, 다시 지정해줄 우선순위 그룹에 넣어준다.
- 충돌체 기본 작업
'WinApi' 카테고리의 다른 글
[개발일지] 23-05-19 ~ 23-05-21 (0) | 2023.05.21 |
---|---|
[개발일지] 23-05-09 (0) | 2023.05.09 |