winAPI 74 Animation (6)

CJB_ny·2022년 10월 14일
0

WinAPI

목록 보기
77/79
post-thumbnail

오늘 배운거 👍👍👍

  • 직렬화한 데이터들 Save/Load 흐름 파악

  • 바이트 단위로 저장한 데이터 -> 좀더 사용자가 보기 편하게, 즉, 좀더 유의미한 데이터로 시각적으로 볼 수 있도록 해야하지 않나?

  • fwprintf를 통해 2바이트 문자열 저장

  • wstring -> string으로 변환 하는 방법


Texture 클래스어떻게 생성 시켰나? => 경로 받아와서 만들었다.

이거 얻어 올려면 ResourceManager에게서

키값으로 얻어와야한다.

그냥 키값만 이렇게 넣어주면은 된다.

그러면 내가 뭘 저장을 해야 쓰던 Texture를 연결받을 수 있을까??

리소스자체가 키값을 들고있기 때문에 우리는 그냥 키값 => 문자열만 알고있으면 된다.

텍스쳐 저장 끝.

문제

저장할 당시에는 Texture가 있었다.

근데 프로그램을 껏다가 켜서 다시 LoadAnim호출해서 불러올라고 하니까

이런식으로 가져 올려고 해도 로딩이 안되어 있어서 가져올 수 없다..

그래서 정확하게 복구를 할려면은

로딩까지해서 연결해주어야한다.

문제상황 정리

현재 프로그램 켯다 -> Animation이 이러이러한 Texture를 사용하고 있는데

ResourceManager가 이것들을 관리하고있다.

그래내가 이러한 텍스쳐의 키값을 파일에다가 저장을 시켰어.

그리고 프로그램 다시 껏다 켯는데 ResourceManager가 텅 비어있다.

그리고 내가 다시 파일에 저장된 정보를 토대로 애니매이션 불러올라고하는데

리소스 매니저 안에 아무것도 없어서 nullptr반환하게 된다.

즉, 없으면 만들어 놓고 찾든가 해야한다.

그래서 다시 불러올 때를 대비를 해서

무슨 경로를 저장해야하나?

=> 절대 경로? ㄴㄴ => 프로그램 풀더 위치 변경되면 안됨.

=> 상대 경로를 파일에 저장해주어야한다.

그래서 경로도 이따위로 같이 저장을 해주어야한다.

파일 불러오는 부분

이렇게 불러올 것인데

LoadTeture함수가 애초에 Texture가 잇으면 이것을 반환을 하고

없으면 인자로 넘겨 받은 상대 경로를 통해서 로드해서 return 한다.

확인

잘 저장되어있다.

그리고 텍스쳐 또한

지금은 주석으로 해놧는데 이제 주석처리를 해도 잘 불러와진다.

문제점 ❗❗❗

.anim 파일 메모장으로 켯을 경우 뭐가 뭔지 모른다.

이런식으로 뜨기 때문에...

왜 이렇게 뜨나??

우리는 바이트 단위로 그대로 저장시켰다.

근데 메모장은 저장되어있는 데이터를 문자로 해석을 해서 열어 버리기 때문에

바이트 단위로 저장한 데이터를 문자로 해석해서 보면 알 수없는 이상한 글자들이 있는 것이다.

메모장으로 열어서 봤을 때 좀더 유의미한 데이터 형태로 보이게 할려면은

조금 수정할 필요있다.

근데 지금 이 상황은 가장 효율적인 상황이기는 하다.

좀더 유의미하게 바꿀려면 데이터 크기가 좀더 늘어나기는 한다.

유의미하게 저장 ❗❗

fwprintf 함수를 통해서 2바이트 문자열을 이렇게도 저장이 가능하다.

공백은 문자열 길이가 아마 저장이 되어있을 것이다.

문자열끼리 크기 변환 ❗❗

wstring -> string으로 변환

string str = string(_animationName.begin(), _animationName.end());

이런식으로 변경이 가능함.

그리고 결과를 확인을 하면은

좀 바뀐것을 볼 수 있다.

이정도 까지 일단 저장함.

SaveWString는 순수한 바이너리 그 자체로 정말 필요한 것만 압축해서 저장하고 불러오기를 했던 것이다.

읽는부분

우리가 쓰는 부분도 이러한 과정을 거쳤기 때문에

읽을 때도 이러한 과정을 거쳐야한다.

profile
https://cjbworld.tistory.com/ <- 이사중

0개의 댓글