-
[10] - App classGraphics 2021. 7. 13. 15:05
(2) C++ 3D DirectX Tutorial [App class / PeekMessage] - YouTube /
hw3d/hw3d at T10-End · planetchili/hw3d (github.com)/
여태껏 간단한 테스트 코드를 직접 WinMain함수의 Message Pump에 끼워 넣는 방식으로 수행했습니다.
WinMain의 Message를 Dispatch하고 While을 돌며 실험했습니다 그러나 현재보다 규모가 커지고 복잡해지면 모든 코드를 이 Message Pump에 끼워 넣기는 까다롭고 정신이 없을 것입니다. 그래서 게임이나 다른 논리들을 따로 분리해서 Window Interface와 통신을 하는 방향으로 구조를 짜는 편이 훨씬 낫습니다. 추후엔 그래픽 렌더링까지 고려해야 한다는 점을 염두에 두고 구조를 정리해 나갑니다.
App class
Constructor와 Go, DoFrame으로만 구성된 간단한 Class입니다. 이렇게 되면 모든 Logic은 DoFrame 안에서 해결이 될 것입니다. Go는 Application이 시작되면 호출이 될 것이고 이 함수가 Game이나 다른 무언가의 기본적인 Loop를 시작합니다. 또한 당연히 이 App이 Window를 갖고 있어야 합니다.
이제 이를 WinMain함수에 사용하도록 합니다.
이제 처음 Window를 생성할 때부터 안고 있었던 문제점 하나를 해결할 때가 왔습니다. 그 문제를 해결하기 위해선 먼저 시간에 관한 Class, 타이머[Timer]가 필요합니다.
Chrono의 관해서 아예 몰라서는 안 될 것 같다는 직감이 듭니다. MSDN 문서에 따르면 이 Chrono standard header file은 시간의 지속, 인스턴스의 관리를 관장한다고 합니다.
mark함수를 호출하면 마지막으로 이 함수를 호출했던 시점부터 지금까지의 경과된 시간을 반환합니다. Peek함수는 똑같이 mark함수를 마지막으로 호출한 시점부터 Peek를 호출하기까지 경과된 시간을 반환하지만 Mark가 시간을 초기화하는 것과는 다르게 Peek는 초기화 하지 않습니다. 이제 이 Timer Object를 App Class에 추가해줍니다.
그리고 DoFrame에 다음과 같이 쓰면 경과된 시간을 Title의 이름으로 확인할 수 있을 것입니다.
이 Code를 사용하면 Mouse가 Client 영역을 벗어나는 순간 컴퓨터가 멈춥니다. 이유는 도저히 모르겠습니다. 다른 환경에서 하면 잘 됩니다. 대단해!
'Graphics' 카테고리의 다른 글
[12] - Space and transforms - 2 (0) 2021.07.14 [11] - Space and transforms - 1 (0) 2021.07.13 [9] - Mouse (0) 2021.07.12 [8] - Keyboard (0) 2021.07.12 [7] - ICON (0) 2021.07.10