• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    해결됨

게임 루프 관련해서 질문이 있습니다.

23.10.02 15:11 작성 23.10.02 15:25 수정 조회수 191

0

게임에서는 60 FPS 정도는 지원을 해줘야 부드러운 화면 처리가 가능하고 60 FPS를 지원하기 위해 게임 루프를 이용해서 1초에 60번 화면 갱신을 해줘야 되기 때문에 루프를 블로킹하지 않는 비동기 API 위주로 대부분의 기능을 구현해야 되는게 맞는 것인지요?

게임 루프가 실행될 때 Input > Update > Render 라는 큰 흐름은 유지되어야 될텐데
만약 Input이 발생할 시점에 Update나 Render가 실행되고 있다면 Input에서 발생된 데이터는 별도의
자료구조에 담겨있다가 다음 루프에서 Input 데이터를 가져와서 처리하는 형식으로 진행되는게 맞는걸까요?

이벤트 루프라던지 게임루프와 같은 것에 대한 개념이 부족한거 같아 질문드립니다.

답변 2

·

답변을 작성해보세요.

1

만약 Input이 발생할 시점에 Update나 Render가 실행되고 있다면 Input에서 발생된 데이터는 별도의
자료구조에 담겨있다가 다음 루프에서 Input 데이터를 가져와서 처리하는 형식으로 진행되는게 맞는걸까요?

네 그렇습니다. 실제 키보드/마우스 입력 등은 Windows OS에서 이벤트 방식으로 전달되는데,
그것을 '탐지'하는 것이 Input 코드일 뿐 꼭 '동일한' 타이밍에 일어나야 하는 것은 아닙니다.

1

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.10.04

안녕하세요, 인프런 AI 인턴이에요.
게임 루프에 대한 개념에 대해 궁금하신 것 같아요.

게임 루프는 게임 엔진에서 주기적으로 게임의 상태를 갱신하고 화면을 업데이트하는 역할을 합니다. 게임 루프는 일반적으로 무한 반복문으로 이루어져 있으며, 주기적으로 입력을 처리하고 게임의 상태를 업데이트하며 결과를 렌더링하는 과정을 거칩니다.

게임 루프의 기본적인 흐름은 Input > Update > Render 이렇게 이루어집니다. Input 단계에서는 플레이어의 입력을 받아 게임의 로직에 반영합니다. Update 단계에서는 게임의 로직을 수행하고, 게임의 상태를 갱신합니다. Render 단계에서는 실제 화면에 게임의 상태를 그려줍니다.

일반적으로 게임 루프는 매 프레임마다 실행되는 것이기 때문에 블로킹되면 안 됩니다. 따라서 비동기 API를 사용하여 게임 루프를 구현하는 것이 일반적입니다. 비동기 API를 이용하면 블로킹 없이도 주기적으로 입력을 받을 수 있고, 게임 로직을 수행할 수 있습니다.

게임의 입력은 발생 시점에 따라서 처리하는 방법이 달라질 수 있습니다. 일반적으로 입력은 발생하자마자 처리하지만, 게임 루프에서 업데이트나 렌더링 중에 입력이 발생한 경우, 별도의 자료구조에 입력 데이터를 저장해두고 다음 루프에서 처리하는 방식을 사용할 수 있습니다. 이는 입력의 처리 시점을 게임 루프 주기에 맞추기 위한 방법입니다.

이벤트 루프와 게임 루프는 비슷한 개념이지만 약간의 차이가 있을 수 있습니다. 게임 루프는 게임의 상태를 주기적으로 갱신하고 화면을 업데이트하는 역할을 하지만, 이벤트 루프는 사용자의 입력과 같은 이벤트를 처리하는 역할을 합니다. 게임 루프는 게임의 주된 로직 처리에 집중하고, 이벤트 루프는 사용자의 입력 처리에 집중하는 것이 일반적입니다.

더 자세한 내용은 게임 엔진이나 프레임워크에 따라 다를 수 있으니, 해당 프레임워크의 문서나 예제를 참고하시는 것을 추천드립니다.

다른 질문이 있으면 언제든지 물어보세요! 좋은 하루 되세요.