작은 걸음 II — 만들며 배우기

실제 시간에 맞춰 움직이기

실제 시간에 맞춰 움직이기

이번에 배울 것

이동 거리 = 속도 × 시간입니다. 초당 속도를 정하고, 지난 시간만큼 이동하면 반복 속도가 달라도 움직임을 맞출 수 있습니다.

실행해 보기

예제 · example2.cpp
void small_main()
{
    Window window;
    window.open(640, 480);

    double x = 50;
    double speed = 200;

    StopWatch watch;

    while (window.is_open())
    {
        double dt = watch.elapsed();
        watch.reset();

        x = x + speed * dt;

        if (x > 620 || x < 20)
            speed = -speed;

        window.clear(Black);
        window.fill_circle(x, 240, 20, Yellow);
        window.show();
    }
}

dt는 지난 반복부터 흐른 시간을 담는 변수입니다. elapsed로 읽은 뒤 reset하고 speed * dt를 위치에 더합니다.

속도가 초당 200픽셀이면 0.01초에는 2픽셀, 0.02초에는 4픽셀 움직입니다. dt는 새 문법이 아닙니다. speed를 100으로 바꾸어 비교하세요.

Exercise — 시간 기준으로 움직이기

수업 44의 위아래 움직이는 공을 고쳐서 speed를 초당 150 pixel로 만들고 dt를 사용하세요.

연습 문제 코드 · exercise2_starter.cpp
void small_main()
{
    Window window;
    window.open(640, 480);

    double y = 100;
    double speed = 150;
    StopWatch watch;

    while (window.is_open())
    {
        // Measure dt and move using seconds.

        window.clear(Black);
        window.fill_circle(320, y, 20, Green);
        window.show();
    }
}

Hint

loop마다 double dt = watch.elapsed(); watch.reset();을 하고 y = y + speed * dt;로 이동하세요.

풀이 보기
void small_main()
{
    Window window;
    window.open(640, 480);

    double y = 100;
    double speed = 150;
    StopWatch watch;

    while (window.is_open())
    {
        double dt = watch.elapsed();
        watch.reset();

        y = y + speed * dt;

        if (y > 460 || y < 20)
            speed = -speed;

        window.clear(Black);
        window.fill_circle(320, y, 20, Green);
        window.show();
    }
}
← 이전 레슨다음 레슨 →