델타 시간
Coddy Pygame 여정의 게임 루프 섹션에 포함된 레슨. 32개 중 18번째.
clock.tick(60)은 단순히 기다리는 것 이상의 일을 합니다. 마지막으로 호출된 이후 경과한 밀리초 수를 반환합니다. 초당 60프레임일 때는 약 17이고, 느린 컴퓨터에서 뒤처지면 더 커집니다. 이를 1000으로 나누면 초 단위의 프레임 길이인 dt를 얻습니다.
dt = 0
while running:
# 이벤트 처리, 업데이트, 그리기, 화면 전환
dt = clock.tick(60) / 1000첫 번째 프레임에서 dt는 0이고, 그 이후에는 직전 프레임의 길이입니다. 이를 모두 더하면 게임이 시작된 이후 경과한 시간을 얻습니다.
elapsed += dtGem Hunt에서 했던 것처럼 프레임을 세면 게임이 초당 60프레임으로 원활하게 실행되는 동안에만 시간을 측정할 수 있습니다. dt로 측정한 시간은 어떤 컴퓨터에서도 정확합니다. 이 장의 나머지 부분에서는 시간을 기준으로 움직임을 처리합니다.
챌린지
쉬움도화선은 프레임당 1픽셀씩 탑니다. 시간에 따라 타도록 만드세요:
- 루프 전에
elapsed = 0과dt = 0을 설정하세요. clock.tick(60)을dt = clock.tick(60) / 1000으로 바꾸세요.- 루프에서
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 플레이그라운드