d3dx9 - 21.10.27

타임매니저와 로딩추가

타임매니저파일은 엔진에
로딩은 클라이언트에 복사

타임매니저 클래스

-타이머

Cbase 상속해주고 GameInstance를 통해 접근할 수 있게 해주자.

타임매니저를 타이머로 변경해주고 싱글톤 해제.

(기존은 타이머를 딱 하나밖에 사용하지못하기 때문에 타이머를 여러개 동적할당해서 사용할수있게 변경할 것)

end에서 Invalidate를 빼서 1초마다 m_tCpuTick을 갱신해줘야함

-타이머매니저

타이머들을 여러개 구현하기위한 매니저 클래스

애드 타이머스를 통해 타이머를 추가해준다.

컴퓨트 타임델타는 내가 업데이트하고자하는 타이머를 찾고 타이머의 업데이트를 하고 Get_DeltaTime을통해 가져온다.

-게임인스턴스에 타이머매니저 추가
멤버변수로 싱글톤주소 저장해주고 이니셜라이즈 초기화와 free함수호출해주자.
지우는 시기는 딱히 상관없음 장치 전에지워주자!

게임인스턴스의 타임매니저함수들을통해 함수 호출을 연결해주자.

-타이머추가

MainApp을 생성하는 부분에서 GameInstance를 가져와서 Add_Timers함수를 호출해주자(태그는 자유롭게)

Timer_Default로 타이머 생성

pMainApp->tick(의인자로 compute_TimeDelta 호출해주자.

프레임제한을 걸고싶으면 Tick함수를 1초에 60번만 호출할수있게하자.

  • 변수명뒤에 Acc가 붙으면 누적되는 변수라는 뜻이다.

fTimeAcc함수를 통해 60분의 1초가 지나면 호출할수 있게 해주자.

컴퓨트 타임델타가 리턴하는값이 매우 작다면 루프가 일초에 2000번뜬다면 이 타이머는 메인 타이머로 쓸수없다.

타이머 디폴트를 넣어주면 매우작은값이 들어가 게임이 느려지게 된다.

60분1 프레임에서 쓸 새로운 타이머를 만들어주자.

Client의 로딩씬

엔진 디파인에 process.h를 추가해주자.

쓰레드에 필요한 특정데이터는 pArg를통해 넘겨주자.

Free()에서 WaitforSingleObject 및 closehandle 해주자

크리티컬 섹션 만들어주고 쓰레드메인에서 임계영역설정 해주자.

비긴스레드ex함수의 Thread_Main 다음 인자의 쓰레드에 전달값이다 자기자신의 주소를 넘겨주고 이를 받아서 m_cs를 넘겨주자.

로딩하기위한 기능만 로딩 클래스에 구현하고

로더에다가 레벨 로딩 만들어주자.

레벨 로딩 클래스는 로딩화면을 관리하기위한 친구이고

로딩 클래스는 : 로딩화면이 렌더링될때 내부적으로 리소스 객체등 로드 작업을 수행하는 객체이다.

레벨_로딩 클래스

*레벨의 자식으로 구현

*생성자의 인자로 장치를받는다

*받은 장치를 Create에서 처리해준다.

NativeConstruct()

로딩씬이 생성될때 로더를 하나 생선한다.로더는 다음넘어갈 씬에 필요한 객체원형, 자원원형을 생성한다.

*로딩클래스가 NextLevel을 받게 만들어주자.(어떤 레벨에 필요할 자원들을 불러올지 받는 역할)

Create할떄 넥스트레벨을 받아서 네이티브에 넣어준다.

멤버변수에 보관해주고 로딩클래스의 Create에 넣어준다.

CLoading의 Thread_Main()
로더가 어떤 레벨을 로드해야하는가를 받고 준비해주기위한 함수를 레벨마다 각각 만들어주자.Ready_GamePlay0,Ready_GamePlay1

어떤걸 준비하느냐에 따라서 다른 인터페이스를 수행하겠다는 의미

CLoading의 Ready_GamePlay0

원형 게임오브젝트 객체를 생선한다.
원형 게임 리소스 객체를 생성한다.

Level_Loading에
Ready_Layer_BackGround()
Ready_Layer_UserInterface() 선언

레벨로고의 Tick에서 어떤 레벨로 넘어갈것인지를 결정해줘야한다

레벨로딩만있으면됨 무조건 레벨로딩으로만 넘길것이다. 다음 레벨이 무엇인지만 넘겨주면됨

로딩레이어에 추가하겠다.

레벨을 바꾸면서 객체를 추가해줬다.
로고씬이 끝났으면 로고에서 추가해준애들을 지워줘야함

오브젝트매니저에 Clear()함수 구현
레벨인덱스를받아서 그레벨인덱스에 해당하는 컨테이너를 지워주자.

컴포넌트도 레벨별로 관리하고있다.(텍스쳐 메쉬같이 무거운것들을 게임 끝날때까지 들고있는건 너무 무거움 쓰는 레벨이 끝나면 지워주자)

컴포넌트 매니저도 Clear()함수 구현
내용은 오브젝트 매니저와 똑같다.

게임인스턴스의 Clear()함수 구현해주자.

이제 각 레벨의 free에서 Clear함수를 호출해주자.

좋은 웹페이지 즐겨찾기