해결된 질문
작성
·
190
0
int main()
{
::srand(static_cast<unsigned>(time(nullptr)));
board.Init(25, &player);
player.Init(&board);
uint64 lastTick = 0;
while (true)
{
#pragma region 프레임 관리
const uint64 currentTick = ::GetTickCount64();
const uint64 deltaTick = currentTick - lastTick;
lastTick = currentTick;
#pragma endregion
// 입력
// 로직
player.Update(deltaTick);
// 렌더링
board.Render();
}
}
안녕하세요 초반 환경설정을 듣다가 궁금한 점이 있습니다.
1. 일단 1초동안 이 while문을 몇번 돌릴지가 프레임이라고 하셨는데. 저 코드에서 어떻게 while문 반복횟수를 결정할 수있나요 ? player.Update(deltaTick) 부분을 말하신거면 만약에 while문 루프를 조정하고싶으면 sleep 같은걸 써서 조정하나요 ?
2. 1초에 60프레임으로 고정하고싶으면 어떻게 코드를 수정해야하는지 궁금합니다.
답변 1
0
1.
저 부분은 고정 프레임이 아니라 컴퓨터 성능이 좋을수록 무한이 늘어납니다.
2.
1초에 60프레임으로 맞추고 싶다면,
러프하게 1/60초 마다 통과시켜주고 그게 아니라면 continue를 시키면 됩니다.
구현 방법이야 다양하게 있겠지만
가령 deltaTick을 합산해서 별도로 카운팅하는 것이 가장 쉬운 방법이겠죠.
(누적된 deltaTick이 1/60초를 넘기면 통과시키고 리셋하고 ..)
정말 빠른 답변 감사합니다. 근데 말씀하신대로 while문 루프는 컴퓨터 성능마다 다르고 tick은 출력해보니깐 0 0 0 15 16 이런식으로 일정한 숫자가 엄청 빠르게 출력되는데요.
그럼 이 tick들이 합산되는 속도는 while문에 따라 다르니깐 컴퓨터마다 달라질수 있는거 아닌가요 ? 어떻게 정확한 시간을 통제할수있는지 잘 이해가 안갑니다 ㅠ