Menu
CoddyTech

델타 시간

Coddy Pygame 여정의 게임 루프 섹션에 포함된 레슨. 32개 중 18번째.

clock.tick(60)은 단순히 기다리는 것 이상의 일을 합니다. 마지막으로 호출된 이후 경과한 밀리초 수를 반환합니다. 초당 60프레임일 때는 약 17이고, 느린 컴퓨터에서 뒤처지면 더 커집니다. 이를 1000으로 나누면 초 단위의 프레임 길이인 dt를 얻습니다.

dt = 0

while running:
    # 이벤트 처리, 업데이트, 그리기, 화면 전환
    dt = clock.tick(60) / 1000

첫 번째 프레임에서 dt는 0이고, 그 이후에는 직전 프레임의 길이입니다. 이를 모두 더하면 게임이 시작된 이후 경과한 시간을 얻습니다.

elapsed += dt

Gem Hunt에서 했던 것처럼 프레임을 세면 게임이 초당 60프레임으로 원활하게 실행되는 동안에만 시간을 측정할 수 있습니다. dt로 측정한 시간은 어떤 컴퓨터에서도 정확합니다. 이 장의 나머지 부분에서는 시간을 기준으로 움직임을 처리합니다.

challenge icon

챌린지

쉬움

도화선은 프레임당 1픽셀씩 탑니다. 시간에 따라 타도록 만드세요:

  1. 루프 전에 elapsed = 0과 dt = 0을 설정하세요.
  2. clock.tick(60)을 dt = clock.tick(60) / 1000으로 바꾸세요.
  3. 루프에서 dt를 elapsed에 더하고, 도화선의 너비를 max(0, 480 - elapsed * 40)으로 설정해 초당 40픽셀씩 타도록 하세요.

직접 해보기

import pygame

pygame.init()
screen = pygame.display.set_mode((480, 360))
pygame.display.set_caption("Fuse")
clock = pygame.time.Clock()

width = 480

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    width = max(0, width - 1)

    screen.fill((30, 30, 46))
    pygame.draw.rect(screen, (255, 150, 40), (0, 170, width, 20))
    pygame.display.flip()
    clock.tick(60)

pygame.quit()

게임 루프의 모든 레슨

직접 연습해 보세요: Pygame 플레이그라운드