TOOLS GAMES DEVLOG DOCS ABOUT CONTACT
HOME > DOCS > C / raylib > raylib 기반 델타 타임 누적 고정 프레임 레이트 게임 루프
C / raylib Intermediate C99 / raylib 5.0+

raylib 기반 델타 타임 누적 고정 프레임 레이트 게임 루프

물리 연산의 결정론(Determinism)을 보장하기 위해 렌더링 주기에 상관없이 항상 일정한 시간 간격(Fixed dt)으로 로직을 갱신하는 정석 Accumulator 게임 루프.

#C #raylib #Game Loop #Architecture #Physics
핵심 개념모니터 주사율(60Hz, 144Hz, 240Hz)에 따라 물리 계산이 달라지면 플레이어 점프 높이나 충돌 판정이 달라집니다. 'Fix Your Timestep' 패턴은 가변 프레임 타임을 누적기(Accumulator)에 쌓아두고, 고정된 시간 틱($dt = 1/60$) 단위로만 물리 시뮬레이션을 수행합니다.

1. raylib 고정 델타 타임 메인 루프

fixed_loop.c
#include "raylib.h"

#define FIXED_DT (1.0f / 60.0f) // 60Hz 물리 갱신

int main(void)
{
    InitWindow(1280, 720, "Fixed Timestep Loop - LYSC");
    SetTargetFPS(0); // 무제한 가변 렌더링

    float accumulator = 0.0f;

    while (!WindowShouldClose())
    {
        float frameTime = GetFrameTime();
        // 나선형 사망 방지 (프레임 드랍 시 과도한 누적 상한 설정)
        if (frameTime > 0.25f) frameTime = 0.25f;
        accumulator += frameTime;

        // 고정 시간 단계 물리 시뮬레이션
        while (accumulator >= FIXED_DT)
        {
            // PhysicsUpdate(FIXED_DT);
            accumulator -= FIXED_DT;
        }

        // 보간 팩터 alpha = accumulator / FIXED_DT (부드러운 잔상 렌더링용)
        float alpha = accumulator / FIXED_DT;

        BeginDrawing();
        ClearBackground(RAYWHITE);
        DrawText("Fixed Timestep Running", 20, 20, 20, DARKGRAY);
        DrawFPS(20, 50);
        EndDrawing();
    }

    CloseWindow();
    return 0;
}

참고자료 & 관련 링크