Skip to content

02_05.FramesAndTimers

jdeokkim edited this page May 6, 2022 · 2 revisions

프레임, 시간과 타이머

우리가 게임을 만들다 보면 스킬의 재사용 대기 시간 (cooldown) 등을 구현하기 위해 시간을 측정해야 할 때가 있는데, 이럴 때 사용할 수 있는 것이 바로 raylib의 core 모듈 (rcore.c)이 제공하는 시간 관련 함수이다. 이 중에 앞으로 자주 사용하게 될 함수는 바로 GetFrameTime()인데, 이 함수는 게임이 가장 최근에 그린 프레임을 그리는 데에 걸렸던 시간을 반환하는 함수이다. 이 시간은 게임의 FPS (Frames Per Second)에 따라 달라질 수 있는데, 만약 우리가 만든 게임이 평균 60 FPS로 실행이 되고 있다면 GetFrameTime()은 약 1/60초를 반환할 것이다.

// 가장 최근에 그린 프레임을 그리는 데에 걸렸던 시간 (단위: 초)을 반환한다.
RLAPI float GetFrameTime(void);

// `InitWindow()` 호출 이후 지금까지 경과한 시간 (단위: 초)을 반환한다.
RLAPI double GetTime(void);

아래 예제 프로그램을 실행하면, 콘솔 창에 지금까지 흐른 시간이 출력되는 것을 확인할 수 있다.

#include "raylib.h"

#define TARGET_FPS         60

#define SCREEN_WIDTH       256
#define SCREEN_HEIGHT      256

int main(void) {
    InitWindow(SCREEN_WIDTH, SCREEN_HEIGHT, "6pm-crew/play");

    SetTargetFPS(TARGET_FPS);

    // 지금까지 흐른 시간을 이 변수에 저장한다.
    float elapsed_time = 0.0f;
    
    while (!WindowShouldClose()) {
        BeginDrawing();
        
        ClearBackground(BLACK);

        // 이 부분에 주목하자!
        elapsed_time += GetFrameTime();

        TraceLog(LOG_INFO, "ELAPSED_TIME: %.2fs...", elapsed_time);

        EndDrawing();
    }
    
    CloseWindow();

    return 0;
}