WinAPI 37 Animation (2)

CJB_ny·2022년 9월 16일
0

WinAPI

목록 보기
36/79
post-thumbnail

오늘 배운거 👍👍👍

  • 자식 생성자 소멸자를 private으로 막아 두었는데 이쪽으로 접근 가능한 방법

  • 부모 포인터 Resources으로 리소스 관리하기


현재 흐름이 오브젝트가 가지고있는 컴포넌트들 중에

Collider -> update 진행하고

animator경우 map으로 모든 애니매이션 가지고있는데 그 중에서도 현재 애니매이션 -> update돌릴 것이다.

CreateAnimation

Player에서 CreateAnimtion 컴포넌트를 만들때 호출하는 함수 기능이다.

해당 함수를 호출 했을 때 실제로 동적할당하여 애니매이션 만들고

이름을 정해주고, Animator가 누구인지 알려주고 인자로 받아온 녀석들의 정보르르

Create함수에 넣어준다.

그리고 map에다가 make_pair로 정보를 넣어주도록 하자.

이런식이 될 것이다.

프레임 정보 기억하기

지금 Animation.cpp의 Create함수에 마지막인자로 frameCount라는 것을 받는데

이것은 각각의 한프레임에 어떻게 동작하는 지를 프레임정보로 기억을 할 것이다.

구조체를 통해서 이 프레임정보를 가지고 있도록 하자.

각프레임의 데이터

이렇게 sprite있다고 할 때

4번째 밑으로 걷는 애니매이션 동작한다고 했을 때 각프레임의 데이터를 생각해본다면은

첫번째 프레임은

좌상단 정보, 자를 정보 알면은 잘라서 mainDC에다가 복사 시킬 수 있다.

애니매이션이 순차적으로 진행되어야 하는데

'각 프레임에 얼마큼 머물지에 대한 시간이 필요하다'

push_back Anim

AnimFrame이라는 구조체를 만들어서 Create함수 내에서 받은 인자들을 잘 사용하여

구조체의 데이터를 채워넣고 반복문 돌면서 push_back해준다.

다형성과 접근제한자 ❗❗❗❗❗

자식 생성자 소멸자를 private으로 막아 두었는데 이쪽으로 접근 가능한 방법

현재 Texture 클래스의 생성자와 소멸자부분 private으로 걸려있는데

이 부분을 좀 수정하였다.

Resources를 다 상속을 받는 Texture이기 떄문에

모든 리소스를 관리하는 ResourcesManager 의 map의 두번째 타입을 Resource* 로 변경해준다.

이렇게 해주면 Texture든 뭐든 일단 Resources를 상속받기 때문에 부모 포인터로 다 받을 수 있게된다.

현재 리소스의 최상위 부모인 Resources의 소멸자는 public이다.

texture의 생성자와 소멸자는 private으로 막혀있는데

SafeDeleteMap함수를 보면은

지금 T1, T2를 받아서 중위순회 하면서 리소스 싹 다 지울려고한다.

지우는 부분은 ResourceManager의 소멸자 부분에서 지우는데

SafeDeleteMap 들어오면은 for문 돌면서 delete하는데

iter->second가 있을 경우 delete하는데 이때 부모의 소멸자 부분은 열려 있기 때문에

'접근'이 가능하고, iter의 second부분이 texture인데 이 부분이 지금

Resources를 상속받기 때문에 메모리 주소의 첫번째 offset이 가상함수 테이블이다.

이 가상함수 테이블을 참조하여 delete iter->second를 할경우 Resources를 상속받는 texture의 소멸자에 접근이 가능하게 되는 원리이다.

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

0개의 댓글