inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버

프레임워크 제작

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

해결된 질문

355

home

작성한 질문수 8

1

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

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

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

c++ 네트워크 ue-blueprint 게임수학 windows-api

답변 2

1

Rookiss

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

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

1

인프런 AI 인턴

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

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

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

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

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

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

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

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

문제집은 없나요 수업을 어떻게 들어야 할지 모르겠어요

0

106

2

동적배열 Vector의 push_back 함수에서 조건문 질문

0

74

1

디버깅할때 메모리보는법 단축키가 뭐죠??

0

89

1

113-충돌처리 강의에서 22:26 부근의 SetPos()를 적용해도 충돌되지 않고 뚫고 지나가게 됩니다.

0

87

1

SaveFile에서 크래시 발생하는 분들 체크해보세요

1

70

1

수업자료 확인 부탁드립니다.

0

105

3

explicit을 붙였을 때 빨간줄이 뜨는 이유가 맞는지 궁금합니다.

0

100

0

22강에서 구조체와 포인터로 설명해주셨는데 패딩의 경우는 어떻게 되나요?

0

88

2

리소스 매니저 강의 18분 부근

0

89

1

[Service강의] owner -> shared_ptr

0

80

2

C#에서 생성자 관련 질문

0

83

2

특정 조건에서만 함수를 반환할 때

0

90

2

스택 empty

0

105

2

섹션4 배열실습 질문입니다.

0

132

1

섹션3 '파일분할' 강의 질문입니다.

0

99

1

Defines.h의 DECLARE_SINGLE관련 질문입니다.

0

110

1

세션8 우선순위 큐 pop함수의 Predicate 적용 관련 질문이 있습니다.

0

180

3

섹션9 함수 포인터 관련 질문입니다.

0

137

1

exercise_A 번 문제 해결방법에 대한 질문.

0

150

1

[강의명: virtual 소멸자] 자식 클래스의 소멸자에도 virtual 을 붙이시는 이유가 궁금합니다

0

198

2

Scene과 SceneManager 강의 수강 중 키보드 입력 오류

0

146

1

Window API 강의 수강 중 LARGE_INTEGER 타입 변환 오류

0

198

3

섹션15 스마트 포인터 20:00 질문이요!

0

127

1

55강 수업자료 빌드를 하면 이상합니다.

0

132

1