WinAPI 34 Scene (1)

CJB_ny·2022년 9월 14일
0

WinAPI

목록 보기
33/79
post-thumbnail

오늘 배운거 👍👍👍


Scene의 update 함수 오버라이딩해서

C#의 base.Init처럼 부모쪽의 update를 명시적으로 호출을 한 상태이다.

왜 오버라이딩 했냐?

오버라이딩 안했다면 가상합수 테이블에 부모쪽의 update가 등록이 되어서 부모의 update를 호출 할텐데

여기다 '+ 알파'를 할려고 이렇게 오버라이딩한 것이다.

이렇게 간단한게 하면 문제가 많다.

한 프레임은 작업을 마무리를 하고 씬을 전환하든가 해야한다.

ChagneScene

현재프레임에서는 씬을 변경하지 않고 다음 프레임에 씬을 변경할 것이다.

이 부분도 그냥 전역함수화 시켜놓도록 하자. (이벤트 취급)

이렇게 해주도록 하자.

씬 이벤트 흐름 정리

StartScene -> 전역함수인 ChangeScene함수로 이벤트 등록해달라고 요청

전역함수 ChangeScene에서는 요청받은 씬 타입을 EVENT 구조체를 만들어서 정보를 채워 놓고

이벤트를 등록한다.

-> EventManager에서는 해당 구조체(이벤트)를 다음 프레임에서 이벤트 타입에 따라서 ExcuteEvent함수를 호출한다.

이후 SceneManager에다가 실제로 ChangeRealScene 함수를 호출한다.

DeleteGroupObjects

모든 오브젝트들은 Scene에서 관리를 하고있기 때문에

최상위부모인 Scene에서 DeleteGroupObject라는 함수를 만들어서 이렇게 싹다 delete하고

clear해주는 작업을 구현을 해주도록 하자.

그런데 vector라는 container를 우리가 많이쓰는데 씬 전환할 때마다 이러한 반복적인 코드를 계속 적어주어야한다. => 비효율적이다.

이것또한 Func에 전역화 해주도록 하자.

그런데 이렇게 받아버린다면은 이게 원본을 지워야하는데, 복사본을 받지를 않나? => 원본을 받도록 해주자.

템플릿 ❗❗❗

템플릿함수를 헤더에 구현하고 cpp파일에 정의하는데 미리 전방선언하여 구현할 수 있지만 이러면 템플릿의 장점도 사라지고 ㅈㄴ 귀찮은 일이 아닐 수 없다.

그래서 헤더에다가 일단 다 구현을 해주도록 하자.

이렇게 해주면 끝난다.

함수 템플릿 ❗❗❗

지금 이 녀석 자체는 '함수'가 아니다. => '함수 템플릿'이다.

호출될 함수 버젼을 명확하게 지칭해주는 것이 '정석'이다.

현재 템플릿 함수의 원형이 이런데 이것을 정석적으로 호출하는 것은

이렇게 호출한다. 이게 정확한 표현인데

이렇게 < > 안에 T 들어갈 자리에 적어주지 않아도 컴파일러가 알아서 해석을 한다.

함수호출한것이랑 햇갈리면 안된다.

함수 템플릿이다.

요청된 타입이 있어야만 그 버젼의 함수를 만들어주는 '함수 템플릿'이다.

DeletAllGroups

요딴식으로 구현하고 넘겨주도록 하자.

그래서 특정 조건이 되면은 (지금의 경우에는 엔터키 입력)

현재씬의 Exit 호출 ->

StartScene의 DeleteAllGroups 호출 할 것이다.

이제 여기서 다음씬 연결작업을 하면된다.

굿굿.

이럴경우

씬은 바뀌는데 a씬에 있던몇몇개 B씬으로 옮기고 싶을 경우

씬을 전환을 할 때 특정 오브젝트를 그대로 옮길것인지 말 것인지 구현

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

0개의 댓글