작은 걸음 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();
}
}