반응형


http://creaty.net/game/?menu=OpenFM&bid=3&mod=view&post=9



내용 :

 안녕하세요~ 

제가 간단한 게임을 만들고 있는데요 제가 만든 컴퓨터에서는 속도가 적당한데 

다른 컴퓨터에서 하면 엄청 빠르거든요. 그래서 이것저것 뒤져보다가 

프레임 동기화라는 것을 보았습니다. 그래서 검색도 해봤는데 원하는 답이 없어서요 

어떻게 적용시켜야되는건지 감이 잡히지가 않아서요. 

FPS 값을 구해서 이것으로 어떻게하는건가요? 

조언좀 부탁드립니다 ㅠㅠ

이 글은 GPG스터디와 연결된 글입니다. - [Gpg Study 원문보기]


D3DPRESENT_PARAMETERS 구조체를 설정하셔야 합니다.
내용 :

D3DPRESENT_PARAMETERS 구조체의 PresentationInterval 를 어떻게 설정하느냐에 따라 프레임이 천차만별로 달라질 수 있습니다.

보통 사용하는 플래그는 3종류가 있는데, 그것들은 다음과 같습니다.

 

D3DPRESENT_INTERVAL_DEFAULT : DirectX가 적절한 값을 선택하여 렌더링간격을 조절한다.

D3DPRESENT_INTERVAL_IMMEDIATE  : 기다리지 않고, 항상 렌더링한다. (프레임 무제한)

D3DPRESENT_INTERVAL_ONE  : 모니터 갱신이 1번 이루어지는 시간에 렌더링 간격을 맞춘다.


 

만약 프레임이 아니라, 이동에 관한 내용이셨다면 각 프레임간의 시간차이를 이용해 이동거리를 보간해주셔야 합니다.

 

// 시간지정

static time_t before_time = timeGetTime(); // 시간값 초기화

time_t now_time = timeGetTime(); // 현재시간

// 시간차이를 구한다.

time_t tick = timeGetTime() - before_time;

 

// 이동거리 계산 : 가장 간단하게 보간하는 방법은 시간값을 곱하는 것입니다.

position = position + move * tick / 1000.0f;

// 일반적으로 1초에 move 만큼 움직이기위해 1000을 나눠줍니다. 이것은 timeGetTime 함수의 해상도 때문

 

// 마지막으로 현재 프래임의 시간을 저장하고, 다음 프레임에 이용한다.

before_time = now_time;


반응형

+ Recent posts