인프런 커뮤니티 질문&답변

오그리바그리님의 프로필 이미지
오그리바그리

작성한 질문수

window api 프레임 드랍 deltatime 문제

작성

·

137

0

안녕하세요

window api로 유튜브나 인터넷 찾아보면서 공부하며 혼자 게임 프레임워크를 제작해 보고있습니다.

그러다가 object 이동이 컴퓨터 프레임마다 달라진다는걸 깨닫고

object의 이동을 float object.x+=speed * deltatime으로 하니까 서로 다른컴퓨터별로 프레임을 다르게하고

실험해 보니 확실히 이전에 스칼라값으로 이동거리를 조절한거 보다는 speed * deltatime가 이동거리가 비슷하게 나오는거 같은데,

 

프레임이 크게 떨어졌을때 갑자기 object가 뚝 끊겨보이는데 이를 해결할 수 있는 좋은 방법이 있을까요?

순간 멈칫하던가 조금 빠르게 떨리는듯한 현상입니다.

 

다이렉트x나 엔진들은 사용안하고 window api만 사용하고 있어서 좋은 생각이 딱히 안 떠올라 질문합니다.

 

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.

오그리바그리님, Windows API만을 사용하여 게임 프레임워크를 제작하시는 과정에서 프레임 드랍과 관련된 질문이시네요. 프레임 드랍이 생길 때 객체의 움직임이 끊기는 현상을 개선하는 일반적인 방법으로는 여러 가지가 있습니다. 가장 먼저 생각해볼 수 있는 것은 게임 루프 내에서의 최적화입니다.

  1. 객체 업데이트 및 렌더링 최적화: 게임 루프에서 객체의 상태 업데이트와 렌더링을 가능한 효율적으로 처리해보세요. 사용하지 않는 객체는 업데이트에서 제외하고, 렌더링은 현재 카메라 뷰에 보이는 객체들만 대상으로 합니다.

  2. 고정된 시간 단위로 업데이트: deltatime을 사용하여 객체의 이동을 처리하는 것은 좋은 시작입니다. 하지만 일정한 프레임 레이트를 유지하지 못할 때 보간(interpolation) 또는 extrapolation 기술을 적용하여 객체의 움직임을 부드럽게 보정할 수 있습니다. 이 방법은 프레임 레이트가 변동해도 사용자에게 일관된 경험을 제공합니다.

  3. 리소스 관리 최적화: 게임이 사용하는 리소스(텍스처, 사운드 등)의 로딩과 관리를 최적화해보세요. 필요할 때만 리소스를 로드하고, 더 이상 사용하지 않는 리소스는 적극적으로 해제합니다.

  4. 멀티스레딩의 활용: 게임의 논리적 처리와 렌더링을 별개의 스레드로 분리하여 처리하는 방법도 고려해볼 수 있습니다. 이를 통해 렌더링에 소요되는 시간 감소 및 CPU 자원의 효율적 사용이 가능해집니다.

직접 DirectX나 게임 엔진을 사용하지 않고 Windows API만을 사용한다면, 게임의 성능을 최적화하기 위한 다양한 접근 방법을 고려해야 합니다. 이러한 최적화 방법은 게임의 성능을 개선할 뿐만 아니라 프레임 드랍 시 나타나는 문제를 완화하는 데에도 도움이 될 것입니다.

어떤 특정 방법이 오그리바그리님의 상황에 가장 잘 맞을지 고려하여 적용해보시기 바랍니다. 프레임워크 개발 과정이 순조롭게 진행되기를 바랍니다.

오그리바그리님의 프로필 이미지
오그리바그리

작성한 질문수

질문하기