GEMS 4권 클럭 : 게임의 심장 박동
게임에서 클럭(clock)은 모든 것을 주도한다.
시간을 다룰 때 그냥 필요할 때마다 시스템 타이머로부터 시가을 얻는 방식을 사용하기도 하는데, 그런 방법에는 몇 가지 문제점들이 있다.
* 한 프레임 안의 여러 지점들에서 시간을 조회하면 그 때마다 다른 값이 반환될 수 있으며, 그러면 한 화면의 물체들을 갱신할 때 물체가 이상하게 워프하는 모습이 나타나기도 한다.
* 게임을 일시중지하되 특정 부분만 계속 실행되게 할 때 문제가 있을 수 있다.
* 프레임률 변동 때문에 애니메이션이나 카메라 이동이 눈에 띄게 떨리는 현상이 나타날 수 있다.
시간의 기초
한 프레임 안에서 일어나는 주요한 사건들
* 사용자의 입력을 점검
* AI 처리
* 네트워크 패킷처리
* 게임 세계의 물체들을 갱신
* 보여줘야 할 것들을 화면에 표시
게임이 시간을 다루는 방식은 크게 두 가지이다. 하나는 가변 프레임 간격이도 또 하나는 고정 프레임 간격이다. PC용 게임들은 대부분 가변 프레임 간격을 사용한다.
가변 프레임 간격이란 한 프레임에 걸리는 시간이 그 프레임에서 화면에 그리는 것들에 따라 다를 수 있다는 뜻이다.
고정 프레임 간격은 주로 콘솔 게임들에서 볼 수 있다.
콘솔 게임의 경우에는 실행 하드웨어를 미리 파악할 수 있으며, 따라서 한 프레임에 걸리는 시간을 미리 결정해서 고정시켜 둘 수 있다.
클럭 시스템 조직화
* 현재 시간과 한 프레임의 지속 시간을 신뢰성 있게 제공한다.
* 프로그램의 다른 부분과는 독립적으로 게임플레이 시간을 정지하거나 비례한다.
* 시간을 초기값으로 되돌리거나 임의의 값으로 설정할 수 있다.
* 가변 프레임 간격과 고정 프레임 모두를 지원한다.
* 간격 차이가 큰 일련의 프레임들 때문에 생기는 결함을 방지한다.
* 정밀도 문제를 방지한다.
클럭이라는 개념과 타이머라는 개념을 구분할 필요가 있다.
클럭은 게임 안에서 단 하나만 존재하며, 타이머는 여러 개 존재할 수 있다.
클럭은 현재 시간을 보고하며, 항상 증가하지만 한다.
클럭을 중지시키거나 조작할 수 없다.
타이머는 게임 내의 개별적인 용도에 따라 여러개를 만들어서 사용할 수 있다.
타이머는 기본적으로 클럭에 의해 작동하며, 사용자가 직업 조작하는 것이 가능하다.
클럭은 시간을 어디서 얻을까?
스파이크 - 프레임 하나가 시간이 갑자기 길어지는것?
이럴경우 프레임의 상한시간을 둔다.
수직 동기 - 다음 프레임이 그려질 준비가 다 됬다는건가?
다음번의 수직 회귀를 기다렸다가 다음 프레임을 그리는 방법이 흔히 쓰인다. 그런 방법에서는 한 프레임에 필요한 모든것을 수행하고, 수직 동기를 기다리고, 수직 동기가 오면 준비된 후면 버퍼를 표시한다.
오늘날의 PC에선 비효율적이다.(병렬적인 그래픽 시스템에선)
정밀도 -